我正在使用django rest framework发送一个post请求到我的API:
curl --header "X-MyHeader: 123" --data "test=test" http://127.0.0.1:8000/api/update_log/
在我的休息框架视图中,我想获取我的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)
我正在尝试在request.Meta元素上找到我的自定义标题,但是当我打印request.Meta时,我收到500错误。如果我打印request.data,我会得到预期的响应。
¿使用django rest框架在我的帖子请求中获取自定义标题的方法是什么?
答案 0 :(得分:39)
请求的元数据属性的名称为大写:
print request.META
您的标题将以:
的形式提供request.META['HTTP_X_MYHEADER']
或者:
request.META.get('HTTP_X_MYHEADER') # return `None` if no such header
通过将所有字符转换为大写,将所有字符转换为
META
键,将所有字符替换为下划线并在名称中添加HTTP_
前缀。因此,例如,名为X-Bender
的标头将映射到META
密钥HTTP_X_BENDER
。
答案 1 :(得分:0)
如果您提供有效的标题信息并从后端获取该信息,请按照
进行操作client-name='ABCKD'
然后你在post或get函数中得到了客户信息 -
request.META['HTTP_CLIENT_NAME']
它会为您提供输出' ABCKD'。
请记住,无论您在请求中的标头信息中提供有效的变量名称,django都会将其转换为大写字母,并使用' HTTP_
'
在这里,客户端名称将转换为CLIENT_NAME
,前缀为HTTP_
。
所以最终输出是HTTP_CLIENT_NAME