django - 在 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。我错过了什么或在错误的地方观看了吗?
解决方案
正如DRFRequest
类的文档所示,它扩展了 Django 的 HttpRequest:
由于 REST 框架
Request
扩展了 DjangoHttpRequest
,所有其他标准属性和方法也可用。例如request.META
和request.session
字典可以正常使用。请注意,由于实现原因,
Request
该类不从HttpRequest
类继承,而是使用组合扩展该类。
第二段解释了为什么你不能通过做看到这些属性dir()
。代码本身显示了一个被覆盖的方法动态地将__getattr__()
这些属性代理到 HttpRequest 对象。
推荐阅读
- javascript - 如何使 JavaScript 代理的处理程序方法成为异步函数?
- angular - Angular/TypeScript:小吃店的单元测试调用
- python - 计算列总和后自动在表中只插入一行
- tsql - 如何创建外部表的物化视图
- wpf - MahApps.Metro 可以在 MvvmCross 中使用吗?
- node.js - 如何有效地将 Postgres 数据从 Query 传输到 S3
- java - 启动时引发 Apache Tomcat 9 openSSL 错误
- sql-server - SQL IF 语句语法错误:语句中的 END 错误
- sql - SQL UPDATE - 如何使用另一个表更新一个表中的列?
- python - 为`traceback.format_exc()`构建快捷方式