请求对象中的Django REST Framework自定义标头

罗森塔尔

通过@api_view装饰器创建新的API视图时,在查看来自请求的传入自定义标头时遇到问题

我的自定义API视图如下所示:

 @api_view(['GET'])
 def TestView(request):
   print(request.META)
   return Response({'message': 'test'})

我期望做的是

curl --request GET \ --url http://localhost:8000/test \ --header 'custom: test'

我会看到我的自定义标题custom出现在输出中。相反,它根本不存在。在文档中,request.META字段显示以下内容:

A dictionary containing all available HTTP headers. Available headers depend on the client and server, but here are some examples:

而它们根本不出现在我的输出中。我在这里想念什么吗?

如果相关,我会这样注册我的URL:

urlpatterns = [url(r'test', views.TestView, name='test'), ...]

我的最终目标是编写一个自定义权限类,该类将解析自定义标头并执行与它相关的身份验证,然后允许或拒绝该请求。我在这里的POC只是显示我正在处理的基本示例。我可以提供的输出,print(request.META)但这只是一堵墙,没有我期望的标题。

琉璃苣

DjangoHTTP_会使用自定义标头。认为(虽然不确定)可能与此处描述的一些安全问题有关它还将它们大写,因此custom标题变为HTTP_CUSTOM

from rest_framework.decorators import api_view
from rest_framework.response import Response

import logging

logger = logging.getLogger('django.test')

@api_view(['GET'])
def TestView(request):
    logger.info('Meta: %s' % request.META['HTTP_CUSTOM'])
    return Response({'message': 'test'})

正确输出(如果已按照此处所述正确配置日志记录):

Django version 2.0, using settings 'django_server.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
"GET /test HTTP/1.1" 301 0
Meta: test
"GET /test/ HTTP/1.1" 200 18

另外,如您在上面的输出中看到的那样,当API被命中时,Django给出了301重定向(我相信这是出于身份验证目的?还是不确定),因此您必须使用以下命令告诉cURL遵循重定向--location

curl --location --request GET \
     --header 'custom: test' http://localhost:8000/test

另请注意,-标头名称中的所有连字符()都会转换为下划线符号(_),因此,如果您将标头命名为my-custom,则Django会将其转换为HTTP_MY_CUSTOM

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Django Rest Framework API客户端自定义标头

自定义标头未添加到Django Rest Framework中的request.META中

使用Django Rest框架在发布请求时获取自定义标头

Django rest框架:客户端中的自定义标头与单元测试中的标头不同

将自定义标头添加到REST PUT请求

对Django的请求中缺少自定义标头

自定义字段Django Rest Framework

Django Rest Framework的自定义例外

Django Rest Framework自定义端点

HttpClient请求的自定义标头

未调用Django Rest Framework自定义对象权限

如何检查请求的用户在 Django Rest Framework 中是否具有特定的自定义权限?

Django Rest Framework:如何在GET请求的响应中添加自定义字段?

“请求”对象在 Django Rest Framework 中没有属性“pop”?

Django Rest Framework中的Viewset'create'自定义赋值

在Prometheus的HTTP请求中添加自定义标头

自定义标头未插入servlet的请求中

TypeScript 在 Express 中添加自定义请求标头

RestKit中每个请求的自定义标头

在AVPlayer的请求中添加自定义标头字段

在截击请求中添加自定义标头

从请求中剥离的CORS自定义标头

如何在 Django REST 框架中的自定义序列化程序字段中访问请求对象?

Django Rest Framework缓存标头

在URL对象中设置自定义HTTP请求标头不起作用

404错误的Django Rest Framework自定义消息

Django Rest Framework-按自定义字段过滤

使用 Django Rest Framework 的自定义 JSON 回调

Django REST Framework自定义字段验证