如何在Django Rest框架上访问自定义HTTP请求头?
我正在向使用django rest框架生成的API发送post请求:如何在Django Rest框架上访问自定义HTTP请求头?,django,curl,django-rest-framework,http-headers,Django,Curl,Django Rest Framework,Http Headers,我正在向使用django rest框架生成的API发送post请求: curl --header "X-MyHeader: 123" --data "test=test" http://127.0.0.1:8000/api/update_log/ 在我的rest框架视图中,我想获取Costam头,如果自定义头满足一个条件,我将继续分析我的post数据 好的,我的观点如下: class PostUpdateLogView(APIView): throttle_classes = ()
curl --header "X-MyHeader: 123" --data "test=test" http://127.0.0.1:8000/api/update_log/
在我的rest框架视图中,我想获取Costam头,如果自定义头满足一个条件,我将继续分析我的post数据
好的,我的观点如下:
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 framework在我的post请求上获取自定义头的方法是什么?请求的元数据属性的名称是大写的:
print request.META
您的标题将作为以下内容提供:
request.META['HTTP_X_MYHEADER']
或:
:
通过将所有字符转换为大写,将所有连字符替换为下划线,并在名称中添加HTTP
前缀,请求中的HTTP头将转换为META
键。因此,例如,名为X-Bender
的头将映射到META
键HTTP\u X\u Bender
如果您提供了一个有效的头信息,并从后端获取该信息,那么请遵循以下步骤
client-name='ABCKD'
然后您就可以在post中获取客户机信息,或者在下面的get函数中获取客户机信息-
request.META['HTTP_CLIENT_NAME']
它将为您提供输出“ABCKD”
请记住,无论您在请求中的头信息中提供的有效变量名是什么,django都会将其转换为大写,并使用“HTTP
”作为前缀
在这里,它将客户端名称转换为client\u name
,并以HTTP\u
作为前缀。
所以最后的输出是HTTP_CLIENT_NAME对不起,就像一个丢失的(;),我在这上面花了两个小时。。。也许,当我使用curl请求api时,您知道如何查看bug细节吗?当我使用curl发送post请求时,我只能在控制台上看到类似[05/Feb/2015 08:40:39]“post/api/update_log/HTTP/1.1”500 78112这样的答案,但我看不到错误的详细信息。谢谢,请原谅我的疏忽。将
curl
的输出重定向到该文件,然后在浏览器中打开该文件<代码>卷曲。。。http://127.0.0.1:8000/api/update_log/ >错误。html
request.META['HTTP_CLIENT_NAME']