首页 > 解决方案 > 在 Django 中请求数据

问题描述

我有一个继承 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。我错过了什么或在错误的地方观看了吗?

标签: djangopython-3.xdjango-rest-framework

解决方案


正如DRFRequest的文档所示,它扩展了 Django 的 HttpRequest:

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

请注意,由于实现原因,Request该类不从HttpRequest类继承,而是使用组合扩展该类。

第二段解释了为什么你不能通过做看到这些属性dir()代码本身显示了一个被覆盖的方法动态地将__getattr__()这些属性代理到 HttpRequest 对象。


推荐阅读