在使用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中获取参数(路径,查询,请求头,请求体)
提取URL的特定部分,如/weather/shanghai/2018,可以在服务器端的路由中用正则表达式截取;
查询字符串(query string),形如key1=value1&key2=value2;
请求体(body)中发送的数据,比如表单数据、json、xml;
在http报文的头(header)中。
在定义路由URL时,可以使用正则表达式提取参数的方法从URL中获取请求参数,Django会将提取的参数直接传递到视图的传入参数中。
1. 1未命名参数按定义顺序传递
注意:参数获取的顺序与url中参数的位置一一对应,不能互换
1 2 3 4 5 |
|
1.2 命名参数按名字传递
注意:如果在路由中指定了参数的名字,name接收参数时,必须要使用路由中指定的参数名称,不能换成其他名字,此时,两个参数位置可以互换。
1 2 3 4 5 |
|
(形如?k1=v1&k2=v2),可以通过request.GET属性获取,返回QueryDict对象。
什么是QueryDict对象?
定义在django.http.QueryDict
HttpRequest对象的属性GET、POST都是QueryDict类型的对象
与python字典不同,QueryDict类型的对象用来处理同一个键带有多个值的情况
2.1方法get():根据键获取值
如果一个键同时拥有多个值将获取最后一个值
如果键不存在则返回None值,可以设置默认值进行后续处理
1 |
|
2.2方法getlist():根据键获取值,值以列表返回,可以获取指定键的所有值
如果键不存在则返回空列表[],可以设置默认值进行后续处理
dict.getlist('键',默认值)
2.3获取参数实例
访问路径:/user/qs/?a=1&b=2&a=3
注意:查询字符串不区分请求方式,客户端GET,POST方式的请求,都可以通过request.GET获取请求中的查询字符串数据。
1 2 3 4 5 6 7 8 9 |
|
3.1表单数据获取
通过request.POST来获取
注意:Django默认开启了CSRF防护,会对上述请求方式进行CSRF防护验证,在开发测试时可以关闭CSRF防护机制,方法为在settings.py文件中注释掉CSRF中间件
1 2 3 4 5 6 |
|
3.2非表单数据获取
非表单类型的请求体数据,Django无法自动解析,可以通过request.body属性获取最原始的请求体数据,自己按照请求体格式(JSON、XML等)进行解析。request.body返回bytes类型
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|
通过view函数传递过来的 reuqest,使用request.META.get("header key")来获取
注意:
header key必须大写,前缀必须是"HTTP",后面如果连接符是横线“-”,要改成下划线“_”。例如你的header的key为api_auth,那在Django中应该使用request.META.get("HTTP_API_AUTH")来获取请求头的数据。
request.method 请求方式
request.path 请求路径
request.user 请求的用户对象
request.FILES 一个类似于字典的对象,包含所有的上传文件
request.encoding 一个字符串,表示请求的页面的完整路径,不包含域名和参数部分。
1 2 3 4 5 6 7 |
|