Does Django's csrf_exempt decorator remove all POST data?
我有一个 Django 视图,它返回一个对象列表,或者允许你在 POST 时创建一个...
1 2 3 4 5 6 7 8 | @csrf_exempt def 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,我想尝试手动完成它 - 这样您就可以更好地理解它。)
无论如何,在我的测试中,我使用请求来检查这个是否有效...
1 2 3 4 5 | response = requests.post( self.live_server_url + f"/quantities/", data={ "name":"Height","units":"m","description":"Human Height" } ) |
这不起作用 - 它不传递任何数据。上面视图中的
我唯一能想到的是
我的 POST 数据去哪里了?
@phenicie 评论是正确的。
当使用 csrf 时,除了发布 Json 数据时,您必须以不同的方式在后端检索它......而不是更改您帖子上的内容类型(更改为不准确的内容类型),您将获得 request.body 而不是 request.POST .
1 | data = json.loads(request.body) name = data['name'] |
所以事实证明,由于某种原因,我的请求有一个标头