【发布时间】:2016-12-19 14:07:03
【问题描述】:
我正在尝试学习如何在 Django 中使用 API,并且我想从一个网页中的 html 中返回一些简单的数据。该 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,因此我制作了以下模型、视图和表单
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'
views.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})
forms.py
class DomainAuthorityForm(forms.ModelForm):
class Meta:
model = DomainAuthority
fields = ['url']
所以我的表单可以正常工作,当在 html 表单中输入 url 时,它会保存在管理后端,但我现在不知道该怎么做是如何将该 url 传递到 Mozscape API,以便我可以获得得分。
我查看了 Django rest 框架并安装了它,并在 Youtube 和其他地方观看了一些快速教程视频,但在这些示例中,他们将保存的 Django 对象(例如博客文章)作为 JSON 数据返回,这不是什么我想做。
我尝试将 API 导入到视图文件中,然后将此行添加到视图中
get_da = client.urlMetrics(new_domain, cols=68719476736)
但是在网页的表单中输入网址后出现此错误
<DomainAuthority: https://www.google.com> is not JSON serializable
我需要在这里做什么才能将用户输入的 url 传递给 API 并在网页中返回正确的响应?
谢谢
编辑 - 截至 8 月 19 日的更新视图
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'
【问题讨论】:
-
错误的原因是
new_domain是一个DomainAuthority实例,而不是urlMetrics()函数所期望的字符串。您应该将其称为urlMetrics(new_domain.url)。现在,您是将调用结果存储在数据库中,还是仅在视图中使用? -
谢谢你,我要试试下面的答案,来回答你的问题我真的很想尝试两个,所以把分数保存到数据库中并在视图中使用它