在Django中请求数据

时间:2018-07-25 08:19:53

标签: django python-3.x django-rest-framework

我有一个继承Django Rest Framework mixins的视图-

class ChartQueryView(mixins.RetrieveModelMixin,
                mixins.UpdateModelMixin,
                mixins.DestroyModelMixin,
                mixins.CreateModelMixin,
                generics.GenericAPIView):

queryset = ChartQueryMap.objects.all()
serializer_class = ChartQuerySerializer

def get(self, request, *args, **kwargs):
    print("request inside get", dir(request))

请求目录已打印-

['DATA', 'FILES', 'POST', 'QUERY_PARAMS', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattr__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_auth', '_authenticate', '_authenticator', '_content_type', '_data', '_default_negotiator', '_files', '_full_data', '_load_data_and_files', '_load_stream', '_not_authenticated', '_parse', '_request', '_stream', '_supports_form_parsing', '_user', 'accepted_media_type', 'accepted_renderer', 'auth', 'authenticators', 'content_type', 'data', 'force_plaintext_errors', 'negotiator', 'parser_context', 'parsers', 'query_params', 'stream', 'successful_authenticator', 'user', 'version', 'versioning_scheme']

我在这里找不到META或COOKIES。我错过了什么东西还是在错误的地方观看了?

1 个答案:

答案 0 :(得分:4)

documentation for DRF's Request class所示,它扩展了Django的HttpRequest:

  

随着REST框架的Request扩展了Django的HttpRequest,所有其他标准属性和方法也都可用。例如,request.METArequest.session字典可以正常使用。

     

请注意,由于实现原因,Request类并非继承自HttpRequest类,而是使用composition扩展了该类。

第二段说明了为什么通过执行dir()看不到那些属性。 code itself显示了重写的__getattr__()方法将这些属性动态代理到HttpRequest对象。