为了账号安全,请及时绑定邮箱和手机立即绑定

Django 的 csrf_exempt 装饰器会删除所有 POST 数据吗?

Django 的 csrf_exempt 装饰器会删除所有 POST 数据吗?

catspeake 2021-09-28 17:05:42
我有一个 Django 视图,它返回一个对象列表,或者允许您在 POST 时创建一个对象...@csrf_exemptdef quantities(request):    if request.method == "POST":        kwargs = {**request.POST}        print(request.POST)        quantity = Quantity.objects.create(**kwargs)        return JsonResponse({"quantity": f"/quantities/{quantity.id}/"})    return JsonResponse([], safe=False)如果它收到一个 GET 请求,它会返回一个数量列表(代码未显示),这可以正常工作,如果它收到一个 POST 请求,它会使用 POST 数据来创建一个新的数量。(我知道 DRF 为您完成了所有这些工作,但是对于我的第一个 API,我想尝试手动完成它 - 这样您就可以更好地理解它。)无论如何,在我的测试中,我使用请求来检查它是否有效......response = requests.post( self.live_server_url + f"/quantities/", data={  "name": "Height", "units": "m", "description": "Human Height" })这不起作用 - 它不传递任何数据。这print在上面刚刚打印的观点陈述<QueryDict: {}>。出于某种原因,我放入请求中的 POST 数据在它通过所有中间件并到达视图时已经从请求中消失了。我唯一能想到的是@csrf_exempt装饰器正在删除 POST 数据,尽管我无法想象为什么。我查看了它的源代码,它似乎没有这样做,但我无法检查,因为删除装饰器意味着视图只返回 403 响应。我的 POST 数据去哪里了?
查看完整描述

2 回答

?
GCT1015

TA贡献1827条经验 获得超4个赞

所以事实证明,由于某种原因,我的请求有一个标头这一事实"Content-Type": "application/json"使 Django 无法从请求正文创建一个 POST 字典。我不知道为什么,但删除该标题解决了这个问题。


查看完整回答
反对 回复 2021-09-28
  • 2 回答
  • 0 关注
  • 164 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信