我正在向使用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 = ()
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)
我正试图根据请求查找我的自定义标题。元元素,但当我打印请求时。梅塔,我有500个错误。如果我打印请求。数据,我得到了预期的响应。
使用django rest框架在我的帖子请求上获得自定义标题的方法是什么?
看到这是一篇老文章,我想我会分享自Django 2.2以来提供的更新和更灵活的方法。您可以使用请求的headers对象:
# 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"
与请求的最大区别。META
是指request.headers
不以HTTP_
前缀标头,它不将标头名称转换为UPPER_SNAKE_CASE
,并且标头可以不区分大小写地访问。它只会在显示时将标题转换为标题-外壳
(例如X-Myhead
)。
如果您提供了一个有效的头信息,并从后端获取该信息,那么请遵循以下步骤
client-name='ABCKD'
然后您就可以在post中获取客户机信息,或者在下面的get函数中获取客户机信息-
request.META['HTTP_CLIENT_NAME']
它将为您提供输出“ABCKD”。
请记住,无论您在请求的头信息中提供的有效变量名是什么,django都会将其大写并以“HTTP\u
”作为前缀,在这里,它会将客户端名称转换为client\u name
并以HTTP\u
作为前缀。所以最后的输出是HTTP_客户机_名称
请求的元数据属性的名称为大写:
print request.META
如果您的标头名为"My-Header",您的标头将以以下方式提供:
request.META['HTTP_MY_HEADER']
或:
request.META.get('HTTP_MY_HEADER') # return `None` if no such header
从留档报价:
通过将所有字符转换为大写,用下划线替换任何连字符并在名称中添加HTTP_
前缀,将请求中的HTTP标头转换为META
键。因此,例如,名为X-Bender
的标头将映射到META
键HTTP_X_BENDER
。
我想我会在这里问这个问题,因为我不太确定我会错在哪里。我正在尝试使用Django Rest框架类通过AJAX执行POST请求。但是,每当事件触发时,我都会收到以下错误: 这是堆栈跟踪中显示的内容: 上下文 我试图做到这一点,当用户单击“添加到列表”按钮时,它会向用户定义的列表发送一个cafeName(以及最终的其他详细信息)。 我想知道是否有人可以看看我的代码,并给我一些指导,我哪里出了问题? 代
我想将带有JSON对象的POST请求发送到指定的URL,但总是失败。 我已经检查了每个数据,以确保它们是正确的,但当我发送它们时,它们似乎被更改了,因此目标服务器无法正确处理我的请求。 我想这可能是appid中的错误。回复总是告诉我appid不正确,即使我百分之百确定它是正确的。下面是appid参数的格式:name:appid type:INT,但17位数字的INT完全超出范围。 响应:{“err
问题内容: 使用urllib2.urlopen(..)时,我想在请求中发送自定义的“ Accept”标头。我怎么做? 问题答案: 不完全的。创建对象实际上并不发送请求,并且Request对象没有方法。(还:是小写字母。)您需要做的就是将用作第一个参数,这将给您您的答复。
问题内容: 如何修改参数以发送请求,如下所示: “获取www.sample.com HTTP / 1.0” “获取www.sample.com HTTP / 1.1” 问题答案: 请求不支持发送HTTP / 1.0消息。很难理解为什么需要这样做:HTTP / 1.1最初是在1999年6月发布的RFC 2616中指定的。因此,HTTP / 1.0已经过时了16年以上:现代工具在很大程度上不支持HTT
根据AWS文档,API网关使用以下输入调用自定义授权器。基于以下,我假设我的要求是不可能的。但希望检查是否有解决方法。
问题内容: 我在中的代码: 在“ settings.py”中: 但我得到一个错误: 问题答案: 在该范围内不是变量。你必须首先从上下文中获取它。传递t给装饰器并添加context到tag参数。 像这样: