我使用这样的邮递员向我的本地服务器发出请求:
正如您所看到的,它是一个帖子请求。在我看来(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()
时会发生一些变化。有什么想法吗?
答案 0 :(得分:1)
我相信您应该能够覆盖视图中的initial()
方法,以实现您的尝试。 APIView
类的docstring写道:
"""
Runs anything that needs to occur prior to calling the method handler.
"""
所以,它看起来像是:
class FaveoAPIView(APIView):
def initial(self, request, *args, **kwargs):
super(FaveoAPIView, self).initial(request, *args, **kwargs)
# Manipulate request.data to your heart's content here
在APIView
中,这会在您的方法处理程序之前立即调用。
答案 1 :(得分:0)
super(FaveoAPIView, self).dispatch(request, *args, **kwargs)
会致电initialize_request
将请求转为DRF。这只能是一次,因此它会在那之后失败。
您是否可以告诉我们您的实际问题,而不是修复损坏的解决方案,即在调用视图本身之前需要访问请求数据的原因?