2015-02-05 116 views
9

我发送POST请求我的API POST请求自定义页眉使用Django休息框架方面:获取与Django的REST框架

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,我会得到预期的回复。

What使用django rest框架在我的发布请求上获得自定义标头的方法是什么?

回答

20

请求的元数据属性的名称是大写:

print request.META 

你的头将作为:

request.META['HTTP_X_MYHEADER'] 

或者:

request.META.get('HTTP_X_MYHEADER') # return `None` if no such header 

Quote from the documentation

将请求中的HTTP标头转换为META键,方法是将所有字符转换为大写,用下划线替换任何连字符并将名称前缀加上HTTP_。因此,例如,名为X-Bender的标题将被映射到METAHTTP_X_BENDER

+0

对不起,就像一个失踪(;),我在这个两个小时......也许,你知道如何使用curl请求api时可以看到错误细节吗?当我使用curl发送发布请求时,我只能在我的控制台上看到类似[05/Feb/2015 08:40:39]“POST/api/update_log/HTTP/1.1”500 78112的答案,但我无法查看错误细节。谢谢你,原谅我的疏忽。 – 2015-02-05 14:16:15

+1

将'curl'的输出重定向到文件,然后在浏览器中打开该文件。 'curl ... http://127.0.0.1:8000/api/update_log/> error.html' – catavaran 2015-02-05 14:36:13

0

如果你提供一个有效的头信息,并从后端的信息然后按照这些

client-name='ABCKD' 

那么你得到的职位,客户信息或获取函数以下这个 -

request.META['HTTP_CLIENT_NAME'] 

它会给你输出'ABCKD'。

记住,无论你在你的请求头信息提供了有效的变量名,Django的将其转换大写和前缀在这里“HTTP_” 将客户名称转换为CLIENT_NAME和前缀HTTP_。 所以最终输出是HTTP_CLIENT_NAME