【发布时间】:2015-11-16 22:08:28
【问题描述】:
我使用邮递员向我的本地服务器发出请求,如下所示:
如您所见,这是一个发布请求。在我看来 (APIView) 我需要访问 json 数据。但是当我尝试时:
request.POST
# <QueryDict: {}>
或
request.data # ¿?
# AttributeError: 'WSGIRequest' object has no attribute 'data'
我可以看到发送的数据的唯一方法是当我访问时
request.body
# '{\n "token": "6J3qG4Ji2Jw44eIklKvPYxUgclfGRWHZDKG",\n "city": "Port Orange",\n "state": "FL",\n "formatted_address": "Peach Blossom Blvd 5329",\n "_zip": "32128"\n}'
但这是'str'
>>> type(request.body)
<type 'str'>
我试图在dispatch() 方法中访问请求的数据。我可以这样做:
req = self.initialize_request(request)
这会返回一个rest_framework.request.Request 对象,我可以访问请求数据。但是后来我不能打电话了
super(FaveoAPIView, self).dispatch(request, *args, **kwargs)
因为我得到:
{
"status_code": 400,
"object": "Malformed request.",
"success": false
}
我不明白为什么,我猜当我打电话给self.initialize_request() 时,事情发生了变化。有什么想法吗?
【问题讨论】:
-
您在这里要解决的实际问题是什么?在大多数情况下,重写 dispatch() 方法实际上并不是解决问题的最佳方法。
-
@JoeyWilhelm 我不想重写调度,我想在正常的视图流程之前执行一些代码。但我需要在我的 post(或 get)方法执行之前访问 request.data。
标签: django django-rest-framework django-class-based-views