我有一个继承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。我错过了什么东西还是在错误的地方观看了?
答案 0 :(得分:4)
如documentation for DRF's Request
class所示,它扩展了Django的HttpRequest:
随着REST框架的
Request
扩展了Django的HttpRequest
,所有其他标准属性和方法也都可用。例如,request.META
和request.session
字典可以正常使用。请注意,由于实现原因,
Request
类并非继承自HttpRequest
类,而是使用composition扩展了该类。
第二段说明了为什么通过执行dir()
看不到那些属性。 code itself显示了重写的__getattr__()
方法将这些属性动态代理到HttpRequest对象。