And*_*oga 23 django curl django-rest-framework
我正在使用django rest框架向我的API发送一个帖子请求:
curl --header "X-MyHeader: 123" --data "test=test" http://127.0.0.1:8000/api/update_log/
Run Code Online (Sandbox Code Playgroud)
在我的休息框架视图中,我想获取我的costum标头,如果自定义标头满足条件,我将继续分析我的帖子数据.
好的,我的观点看起来像:
class PostUpdateLogView(APIView):
throttle_classes = ()
permission_classes = ()
parser_classes = (
parsers.FormParser,
parsers.MultiPartParser,
parsers.JSONParser,
)
renderer_classes = (renderers.JSONRenderer,)
def post(self, request):
print request.Meta
# Get custom header
# Validate custom header
# Proceed to analize post data
# Make response
content = {
'response': 'response',
}
return Response(content)
Run Code Online (Sandbox Code Playgroud)
我正在尝试在request.Meta元素上找到我的自定义标题,但是当我打印request.Meta时,我收到500错误.如果我打印request.data,我会得到预期的响应.
¿使用django rest框架在我的帖子请求上获取自定义标题的方法是什么?
cat*_*ran 43
请求的元数据属性的名称为大写:
print request.META
Run Code Online (Sandbox Code Playgroud)
您的标题将显示为:
request.META['HTTP_X_MYHEADER']
Run Code Online (Sandbox Code Playgroud)
要么:
request.META.get('HTTP_X_MYHEADER') # return `None` if no such header
Run Code Online (Sandbox Code Playgroud)
META通过将所有字符转换为大写,将所有字符替换为下划线并HTTP_为名称添加前缀,将请求中的HTTP标头转换为键.因此,例如,调用的标头X-Bender将映射到META密钥HTTP_X_BENDER.
jbo*_*oot 18
看到这是一篇旧文章,我想我应该分享自 Django 2.2 以来可用的更新且更灵活的方法。您可以使用请求的标头对象:
# curl --header "X-MyHeader: 123" --data "test=test" http://127.0.0.1:8000/api/update_log/
request.headers['X-MYHEADER'] # returns "123"
request.headers['x-myheader'] # case-insensitive, returns the same
request.headers.get('x-myheader') # returns None if header doesn't exist
# standard headers are also available here
request.headers.get('Content-Type') # returns "application/x-www-form-urlencoded"
Run Code Online (Sandbox Code Playgroud)
最大的区别request.META是,它request.headers不会在标头前面添加HTTP_,它不会将标头名称转换为UPPER_SNAKE_CASE,并且可以不区分大小写地访问标头。它只会在显示时将标题转换为Title-Casing(例如X-Myheader)。
如果您提供有效的标头信息并从后端获取该信息,请遵循这些
client-name='ABCKD'
Run Code Online (Sandbox Code Playgroud)
那么你已经在 post 或 get 函数中获得了该客户信息 -
request.META['HTTP_CLIENT_NAME']
Run Code Online (Sandbox Code Playgroud)
它会给你输出'ABCKD'。
请记住,无论您在请求的标头信息中提供的有效变量名称是什么,django 都会将其转换为大写并以 ' HTTP_' 为前缀,在这里它将客户端名称转换为CLIENT_NAME并以HTTP_.为前缀。所以最终输出是 HTTP_CLIENT_NAME
| 归档时间: |
|
| 查看次数: |
20318 次 |
| 最近记录: |