https://ultimatedjango.com/blog/how-to-consume-rest-apis-with-django-python-reques/
我正在遵循本指南并尝试更改API以与semrush.com网站一起使用。
问题是,与教程不同,它们不会以JSON格式返回数据,但是像这样:
我为rest框架安装了CSV渲染并将其添加到设置中:
REST_FRAMEWORK = {
# specifying the renderers
'DEFAULT_RENDERER_CLASSES': (
'rest_framework_csv.renderers.CSVRenderer',
),
}
这是serialaizer:
class SemrushSerializer(serializers.ModelSerializer):
class Meta:
model = SavedSemrush
和views.py:
def save_semrush(request):
if request.method == "POST":
form = SubmitSemrush(request.POST)
if form.is_valid():
keyword = form.cleaned_data['keyword']
r = requests.get('http://api.semrush.com/?type=phrase_organic&key=' + settings.SEMRUSH_KEY + '&display_limit=10&export_columns=Dn,Ur&phrase=' + keyword + '&database=us')
serializer = SemrushSerializer(data=r)
if serializer.is_valid():
serializer.save()
else:
form = SubmitSemrush()
由于在提交表单之后它只是重新加载(没有向orm添加数据)我只能猜测这个数据类型的序列化程序是错误的还是我设法在视图中弄乱了简单的代码:)
有什么想法吗? 欢呼声
答案 0 :(得分:0)
您正尝试使用SemrushSerializer
对象实例化Request
。
您需要传递JSON数据。
r = requests.get(
'http://api.semrush.com/?type=phrase_organic&key={key}&'
'display_limit=10&export_columns=Dn,Ur&phrase={keyword}&'
'database=us'.format(
key=settings.SEMRUSH_KEY,
keyword=keyword
)
json = r.json()
serializer = SemrushSerializer(data=json)