在我的API中,有时你会发出带有id对象的HTTP请求(比如更新首选地址,你输入新默认地址的id)。
我像这样检索它:
address = get_object_or_404(
Address.objects.filter(...),
pk=request.data['address_pk']
)
这完全是功能性的,但它并不是最好的方式。我试图寻找最佳实践,但是我无法找到能满足我好奇心的正确搜索词。
这种从请求获取模型实例的方法是一种好的做法吗?还是应该避免?
答案 0 :(得分:0)
通常的做法是正确使用request
对象。不是request.data
。
pk = request.POST.get('address_pk', 0)
address = get_object_or_404(Address, pk=pk)
您只能使用request.POST
方法使用get
。
答案 1 :(得分:0)
如果您想知道使用request.data是否是最佳选择,那么回答这个问题就是比较request.POST和request.DATA
答案 2 :(得分:0)
pk=request.data['address_pk']
如果请求数据中不存在KeyError
,则会引发address_pk
。稍后,您会发现自己正在编写try...except
块来处理它。
更简单的方法是使用dict.get
方法。
request.data.get('address_pk') # this will default to None if key is absent
KeyError
不会提升。这有助于减少3-4行代码。
但这可能并不总是最佳解决方案,因为当POST数据中没有特定密钥时,您可能希望发送400 Bd Request
响应。在这种情况下,您必须为此编写try...except
块。
答案 3 :(得分:0)
我可以想到一个更好的方法。
使用Django中的URL模式创建类似于此http://domain.name/address/(?P<id>[0-9]{*})/
的URL,它将在URL中具有地址ID,并且可以作为参数id
传递给视图,然后您可以使用它来检索地址以同样的方式。