我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Django request.META.get()为什么获取不到header头

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Django request.META.get()为什么获取不到header头

这篇文章主要介绍Django request.META.get()为什么获取不到header头,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

在使用Django过程中需要开发一些API给其他系统使用,为了安全把Token等验证信息放在header头中。

如何获取:

使用request.META.get("headerkey")来获取

注意:

如果headerkey为auth-token,即headers={'auth-token':'1234'}

应该使用request.META.get("HTTP_AUTH_TOKEN")获取

headerkey中的小写转为大写,横线“-”转为下划线“_”,并且加上前缀HTTP

尤其注意headerkey中不应该包含 HTTP前缀,以及符号"_",否则会取不到对应的值

补充:Django中获取参数(路径,查询,请求头,请求体)

一、通常HTTP协议向服务器传参有几种途径

提取URL的特定部分,如/weather/shanghai/2018,可以在服务器端的路由中用正则表达式截取;

查询字符串(query string),形如key1=value1&key2=value2;

请求体(body)中发送的数据,比如表单数据、json、xml;

在http报文的头(header)中。

1.URL中参数的获取

在定义路由URL时,可以使用正则表达式提取参数的方法从URL中获取请求参数,Django会将提取的参数直接传递到视图的传入参数中。

1. 1未命名参数按定义顺序传递

注意:参数获取的顺序与url中参数的位置一一对应,不能互换

url(r'^users/([a-z]+)/(\d{4})/$', views.get_user),  def get_user(request, name, ID):    print('name=%s' % name)    print('id=%s' % id)    return HttpResponse('OK')

1.2 命名参数按名字传递

注意:如果在路由中指定了参数的名字,name接收参数时,必须要使用路由中指定的参数名称,不能换成其他名字,此时,两个参数位置可以互换。

url(r'^users/(?P<name>[a-z]+)/(?P<id>\d{4})/$', views.users),  def weather(request, name, id):    print('name=%s' % name)    print('id=%s' % id)    return HttpResponse('OK')

2.获取请求路径中的查询字符串参数

(形如?k1=v1&k2=v2),可以通过request.GET属性获取,返回QueryDict对象。

什么是QueryDict对象?

定义在django.http.QueryDict

HttpRequest对象的属性GET、POST都是QueryDict类型的对象

与python字典不同,QueryDict类型的对象用来处理同一个键带有多个值的情况

2.1方法get():根据键获取值

如果一个键同时拥有多个值将获取最后一个值

如果键不存在则返回None值,可以设置默认值进行后续处理

dict.get('key',value)==>可简写为: dict['key']

2.2方法getlist():根据键获取值,值以列表返回,可以获取指定键的所有值

如果键不存在则返回空列表[],可以设置默认值进行后续处理

dict.getlist('键',默认值)   

2.3获取参数实例

访问路径:/user/qs/?a=1&b=2&a=3

注意:查询字符串不区分请求方式,客户端GET,POST方式的请求,都可以通过request.GET获取请求中的查询字符串数据。

url(r'^qs/$',views.get_value,name='g_v'),  def get_value(request):    a = request.GET.get('a')  #3    b = request.GET.get('b')  #2    num_list = request.GET.getlist('a') #['1','3']    print(a)    print(b)    print(num_list)      return HttpResponse(reverse('user:get_value'))

3.请求体中的参数  

3.1表单数据获取   

通过request.POST来获取

注意:Django默认开启了CSRF防护,会对上述请求方式进行CSRF防护验证,在开发测试时可以关闭CSRF防护机制,方法为在settings.py文件中注释掉CSRF中间件

url(r'^getbody/$',views.get_body),  def get_body(request):    form_data = request.POST.get('c')    print(form_data)    return HttpResponse(form_data)

3.2非表单数据获取

非表单类型的请求体数据,Django无法自动解析,可以通过request.body属性获取最原始的请求体数据,自己按照请求体格式(JSON、XML等)进行解析。request.body返回bytes类型

import json  url(r'^getjson/$',views.get_body_json),  def get_body_json(request):    # 得到的是一个二进制数据    json_str = request.body    print(json_str)                     # b'{\n    "f":200,\n    "d":300\n    \n}'\    # 对二进制数据进行解码,解码得到json数据    json_str = json_str.decode()    print(json_str)                     # {"f":200,"d":300}    # 将json数据转化成字典形式    json_data = json.loads(json_str)    print(json_data)                    # {'f': 200, 'd': 300}    # 获取json数据,使用字典方式取值    print(json_data['d'])               # 300    print(json_data['f'])               # 200    return HttpResponse('ok')

4.例如:Django获取http请求头内容  

通过view函数传递过来的 reuqest,使用request.META.get("header key")来获取

  注意:

header key必须大写,前缀必须是"HTTP",后面如果连接符是横线“-”,要改成下划线“_”。例如你的header的key为api_auth,那在Django中应该使用request.META.get("HTTP_API_AUTH")来获取请求头的数据。

5.其他常用HttpRequest对象属性

request.method 请求方式

request.path 请求路径

request.user 请求的用户对象

request.FILES 一个类似于字典的对象,包含所有的上传文件

request.encoding 一个字符串,表示请求的页面的完整路径,不包含域名和参数部分。

url(r'^otherattr/$', views.other_attr),  def other_attr(request):    print(request.method)    # POST    print(request.path)      # /user/otherattr/    print(request.encoding)  # None:表示使用浏览器的默认设置,一般为utf-8,这个属性是可写的,    # 可以通过修改它来修改访问表单数据使用的编码,接下来对属性的任何访问将使用新的encoding值。  

以上是“Django request.META.get()为什么获取不到header头”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注编程网行业资讯频道!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Django request.META.get()为什么获取不到header头

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Django request.META.get()为什么获取不到header头

这篇文章主要介绍Django request.META.get()为什么获取不到header头,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!在使用Django过程中需要开发一些API给其他系统使用,为了安全把Toke
2023-06-14

Openresty获取不到Host请求头怎么解决

这篇文章主要介绍“Openresty获取不到Host请求头怎么解决”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Openresty获取不到Host请求头怎么解决”文章能帮助大家解决问题。服务框架先说
2023-07-04

为什么php获取当前时间不准确

php获取当前时间不准确的解决办法:1、打开php.ini文件,修改内容为“date.timezone =”PRC””;2、使用“date_default_timezone_set('PRC');”代码。
2019-02-08

php获取当前时间为什么不准确

小编今天带大家了解php获取当前时间为什么不准确,文中知识点介绍的非常详细。觉得有帮助的朋友可以跟着小编一起浏览文章的内容,希望能够帮助更多想解决这个问题的朋友找到问题的答案,下面跟着小编一起深入学习“php获取当前时间为什么不准确”的知识
2023-06-28

win7系统为什么找不到摄像头?win7找不到摄像头的最终解决办法大汇总

很多有摄像头的朋友安装Windows 7,驱动完全安装之后,摄像头的图标不见了但是在桌面或者设备管理器中找不到摄像头,无法完android成调试工作,这个对于用户而言是相当不方便的。win7系统为什么找不到摄像头?怎么解决呢?下面小编就给大
2023-06-07

Vue$nextTick为什么能获取到最新Dom源码解析

这篇文章主要为大家介绍了Vue$nextTick为什么能获取到最新Dom源码解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2022-11-13

为什么我不能获取 golang 中函数的地址,但可以获取函数值

php小编子墨为您解答:为什么我不能获取 golang 中函数的地址,但可以获取函数值?在Golang中,函数值是可以被获取的,因为函数值是一种可以被调用的类型。而函数的地址则是不可获取的,这是由Golang的设计决策所决定的。Golang
为什么我不能获取 golang 中函数的地址,但可以获取函数值
2024-02-10

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录