我已经尝试了一段时间来对黑名单网站hetrixtools(https://docs.hetrixtools.com/blacklist-check-api/)进行有效的API调用,只是使用ip地址设置一个简单的API调用,这样我就可以学习如何做API调用。我已经按照如何设置seriliazers,模型,表单,视图和html本身的指南,但我没有找到任何解决方案,为什么它不显示嵌套的json。它显示顶级json非常好,但是当我尝试嵌套我的模型时它不起作用。我尝试了许多=真实,深度,只读但没有一个有所作为。获取嵌套数据我做错了什么?
views.py
def save_blacklist(request):
if request.method == "POST":
form = SubmitBlacklist(request.POST)
if form.is_valid():
ip = form.cleaned_data['ip']
r = requests.get('https://api.hetrixtools.com/v2/' + settings.API_KEY + '/blacklist-check/ipv4/' + ip + '/')
json = r.json()
print(json)
serializer = BlacklistCountSerializer(data=json)
if serializer.is_valid():
blacklist = serializer.save()
return render(request, 'blacklists.html', {'blacklist': blacklist, 'ip': ip})
else:
form = SubmitBlacklist()
return render(request, 'index.html', {'form': form})
serializer.py
class BlacklistNamesSerializer(serializers.ModelSerializer):
class Meta:
model = BlacklistNames
fields = ('id','rbl', 'delist')
class BlacklistCountSerializer(serializers.ModelSerializer):
blacklisted_on = BlacklistNamesSerializer(many=True, read_only=True)
class Meta:
model = BlacklistCounts
fields = ('id','status', 'api_calls_left', 'blacklist_check_credits_left', 'blacklisted_on')
models.py
class BlacklistCounts(models.Model):
status = models.CharField(max_length=15)
api_calls_left = models.IntegerField()
blacklist_check_credits_left = models.IntegerField()
class BlacklistNames(models.Model):
blacklisted_on = models.ForeignKey(BlacklistCounts,
related_name='blacklisted_on', on_delete=models.CASCADE)
rbl= models.CharField(max_length=40)
delist = models.CharField(max_length=40)
这只是我想要学习如何API调用的项目,但是如果我将其转到实际的API调用系统。在开始处理其他API项目之前,我想学习如何使用它。请帮助。
编辑#1:
更改它,以便至少获取数据。如果我在保存序列化程序后打印(serializer.data),它会发回:
"{'id': 5, 'status': 'SUCCESS', 'api_calls_left': 1917, 'blacklist_check_credits_left': 82, 'blacklisted_on': []}"
而正确的数据,当我打印它时:
{'status': 'SUCCESS', 'api_calls_left': 1917, 'blacklist_check_credits_left': 82, 'blacklisted_count': 10, 'blacklisted_on': [{'rbl': 'all.s5h.net', 'delist': 'http://www.usenix.org.uk/content/rbl.html'}, {'rbl': 'bl.mailspike.net', 'delist': 'http://mailspike.org/iplookup.html'}, {'rbl': 'bl.spameatingmonkey.net', 'delist': 'https://spameatingmonkey.com/lookup/149.202.170.60'}, {'rbl': 'cbl.abuseat.org', 'delist': 'http://www.abuseat.org/lookup.cgi?ip=149.202.170.60'}, {'rbl': 'rbl.efnet.org', 'delist': 'http://efnetrbl.org/remove.php?i=149.202.170.60'}, {'rbl': 'rbl.efnetrbl.org', 'delist': 'http://efnetrbl.org/remove.php?i=149.202.170.60'}, {'rbl': 'xbl.spamhaus.org', 'delist': 'https://www.spamhaus.org/query/ip/149.202.170.60'}, {'rbl': 'z.mailspike.net', 'delist': 'http://mailspike.org/iplookup.html'}, {'rbl': 'zen.spamhaus.org', 'delist': 'https://www.spamhaus.org/query/ip/149.202.170.60'}, {'rbl': 'talosintelligence.com', 'delist': 'https://www.talosintelligence.com/reputation_center/lookup?search=149.202.170.60'}]...}
只需使用一些随机ip'149.202.170.60'
进行简单的通话即可完成