【问题标题】:How can I get data from Django Headers?如何从 Django Headers 获取数据?
【发布时间】:2018-11-08 02:27:58
【问题描述】:

我在从 Django Headers 获取数据时遇到问题。

我使用 CURL 的 API:-

curl -X POST \
  https://xyx.com \
  -H 'Cache-Control: no-cache' \
  -H 'Content-Type: application/json' \
  -H 'xyzId: 3223' \
  -H 'abcData: ABC-123' \
  -d '{
  "name": "xyz",
  "dob": "xyz",
  "user_info": "xyz",
}'

在我的 API 中,我需要获取 xyzId 和 abcData

我尝试了request.META['abcData'],但得到了错误KeyError。

如何在我的视图中获取这两个数据?

请帮我解决这个问题。

提前致谢。

【问题讨论】:

标签: python django django-rest-framework django-views


【解决方案1】:

根据文档说https://docs.djangoproject.com/en/2.0/ref/request-response/#django.http.HttpRequest.META

除了上面给出的 CONTENT_LENGTH 和 CONTENT_TYPE 之外,请求中的任何 HTTP 标头都通过将所有字符转换为大写、用下划线替换任何连字符并在名称中添加 HTTP_ 前缀来转换为 META 键。因此,例如,名为 X-Bender 的标头将映射到 META 键 HTTP_X_BENDER。

所以你应该能够像这样访问你的标题

request.META['HTTP_ABCDATA']

【讨论】:

    【解决方案2】:

    如果我正确理解您的问题。

    我相信您正在使用 API。

    from urllib import request
    with request.urlopen(url, data) as f:
        print(f.getcode())  # http response code
        print(f.info())     # all header info
    
        resp_body = f.read().decode('utf-8') # response body
    

    如果您使用的是requests 模块,请稍稍提前。

    然后你可以提出请求。

    head = {}
    head['Cache-Control'] = 'no-cache'
    head['Content-Type'] = 'application/json'
    head['xyzId'] = '3223'
    head['abcData'] = 'ABC-123'
    x = request.post(url='https://xyx.com',headers = head)
    print x.headers
    

    如果您只想按照上述建议使用 Django 视图中的 HTTP 标头访问。

    import re
    regex = re.compile('^HTTP_')
    dict((regex.sub('', header), value) for (header, value) 
           in request.META.items() if header.startswith('HTTP_'))
    

    以上内容将为您提供所有标题。

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-31
      • 1970-01-01
      • 2019-09-16
      • 1970-01-01
      • 1970-01-01
      • 2018-04-16
      • 2018-05-11
      • 2017-12-31
      相关资源
      最近更新 更多