gpt4 book ai didi

python - 如何从 Django 中的 API 返回数据?

转载 作者:行者123 更新时间:2023-11-30 22:51:44 28 4
gpt4 key购买 nike

我正在尝试学习如何在 Django 中使用 API,并且我想从 html 网页中的 API 返回一些简单的数据。该 API 是 Mozscape,当在终端中运行它时,可以获得网站的分数(满分 100),如下所示:

from mozscape import Mozscape

client = Mozscape(
'api_user_id',
'secret_key')

url = 'http://www.google.com'

get_da = client.urlMetrics(url, cols=68719476736)

print(get_da)

这将打印以下内容

{u'pda': 100}

“100”就是我想要的。我希望用户在 Django 页面的表单中输入 url 并获取分数 int,因此我制作了以下模型、 View 和表单

class DomainAuthority(models.Model):
url = models.URLField(max_length=300)


def __str__(self):
return self.url

class Meta:
verbose_name = 'Domain'
verbose_name_plural = 'Domains'

View .py

def DomainAuthorityView(request):


form = DomainAuthorityForm(request.POST or None)


if form.is_valid():
new_domain = form.save(commit=False)
new_domain.save()


return render(request, 'domain_authority.html', {'form': form})

表单.py

class DomainAuthorityForm(forms.ModelForm):
class Meta:
model = DomainAuthority
fields = ['url']

所以我的表单可以工作,当在 html 表单中输入 url 时,它会保存在管理后端中,但我现在不知道如何将该 url 传递到 Mozscape API 中,以便我可以获得得分回来。

我查看了 Django Rest 框架并安装了它,并按照 Youtube 和其他地方的一些快速教程视频进行操作,但在这些示例中,他们使用保存的 Django 对象(例如博客文章)并将它们作为 JSON 数据返回,这并不是什么我想做。

我尝试将 API 导入 View 文件,然后将此行添加到 View 中

get_da = client.urlMetrics(new_domain, cols=68719476736)

但是在网页表单中输入网址后出现此错误

<DomainAuthority: https://www.google.com> is not JSON serializable

我需要在这里做什么才能将用户输入的网址传递给 API 并在网页中返回正确的响应?

谢谢

编辑 - 截至 8 月 19 日的更新 View

def DomainAuthorityView(request):


form = DomainAuthorityForm(request.POST or None)


if form.is_valid():
new_domain = form.save(commit=False)
new_domain.save()


response = requests.get(new_domain.url, cols=68719476736)
#response = requests.get(client.urlMetrics(new_domain.url, cols=68719476736))
json_response = response.json()

score = json_response['pda']

return render(request, 'domain_authority_checked.html', {'score': score})

else:

return render(request, 'domain_authority.html', {'form': form})

所以现在它应该在成功完成表单后使用 url 进行重定向,并将 url 传递给 API 以获取分数,然后重定向到“domain_authority_checked.html”

{{ score }}

所以我在这里有两个结果,如果我将“client.urlMetrics”传递到响应中,我可以加载“domain_authority.html”,但是在将 url 输入到表单中后,错误页面会返回此内容

InvalidSchema at /domainauthority/
No connection adapters were found for '{'pda': 100}'

如果我不将“client.urlMetrics”传递给响应,则 Django 不知道“cols”是什么并返回此

TypeError at /domainauthority/
request() got an unexpected keyword argument 'cols'

最佳答案

我建议采用这种方法:

import requests

response = requests.get(url)
json_response = response.json()

score = json_response['key_name']

然后,您可以简单地渲染模板,将分数添加到模板上下文并使用 {{ }} 显示值。

您可能还想定义一个rest_framework序列化程序(否则您不需要django_rest_framework)并验证此序列化程序的响应,以确保您收到了预期的结果:

serializer = MySerializer(data=json_response)
if serializer.is_valid():
score = json_response['key_name']

关于python - 如何从 Django 中的 API 返回数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38920003/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com