Django 请求参数
Django 请求参数
1.获取URL路径中的参数
需求:假设用户访问127.0.0.1/user/1/2,你想获取1,2。应该怎么操作呢?
(1)未命名参数(位置参数)

# 在项目下的urls.py下增加设置:
url(r'^user/(\d+)/(\d+)$',views.index) # 在user.views的index视图中:
def index(request,a,b): # 接受的参数按顺序的
return HttpResponse("获得数据 %s %s"%(a,b))

(2)命名参数(关键字参数)

# 在项目下的urls.py下增加设置:
url(r'^user/(?P<category>\d+)/(?P<id>\d+)$',views.index) # 在user.views的index视图中:
def index(request,id,category): # 接受的参数可以不用按顺序的
return HttpResponse("获得数据 %s %s"%(category,id))

输出结果均是 获得数据 1 2
2.获取查询字符串
需求:获取127.0.0.1:8000/user?id=1&pid=99的查询字符串的值

# 在项目下的urls.py下增加设置:
url(r'^user/$',views.index) # 在user.views的index视图中:
def index(request):
id = request.GET.get("id")
pid = request.GET.get("pid")
return HttpResponse("获得数据 %s %s"%(id,pid))

注意:查询字符串的获取与请求方式无关:不管是 GET 还是 POST请求,都可以通过request.GET 属性来获取!!!
3.获取表单数据
用postman发送一个表单请求。
def index(request):
id = request.POST.get("id")
pid = request.POST.get("pid")
return HttpResponse("获得数据 %s %s"%(id,pid))
注意:request.POST 只能用来获取POST方式的请求体表单数据!
4.获取非表单类型
request.body属性:获取非表单类型的请求体数据,如:JSON、XML等,获取到的数据类型为bytes类型- 获取数据后,自己解析数据取出参数

def index(request):
json_str = request.body
json_str = json_str.decode() # python3.6及以上不用这一句代码
dict_data = json.loads(json_str) # loads把str转换为dict,dumps把dict转换为str
id = dict_data.get("id")
pid = dict_data.get("pid")
return HttpResponse("获得数据 %s %s"%(id,pid))

5.获取请求头的内容
常见的请求头如下:
CONTENT_LENGTH– The length of the request body (as a string).CONTENT_TYPE– The MIME type of the request body.HTTP_ACCEPT– Acceptable content types for the response.HTTP_ACCEPT_ENCODING– Acceptable encodings for the response.HTTP_ACCEPT_LANGUAGE– Acceptable languages for the response.HTTP_HOST– The HTTP Host header sent by the client.HTTP_REFERER– The referring page, if any.HTTP_USER_AGENT– The client’s user-agent string.QUERY_STRING– The query string, as a single (unparsed) string.REMOTE_ADDR– The IP address of the client.REMOTE_HOST– The hostname of the client.REMOTE_USER– The user authenticated by the Web server, if any.REQUEST_METHOD– A string such as"GET"or"POST".SERVER_NAME– The hostname of the server.SERVER_PORT– The port of the server (as a string).
获取请求头内容的用META
示例:
def index(request):
ip = request.META.get("REMOTE_ADDR")
return HttpResponse("你的ip地址是%s"%ip)
6.获取自定义请求头的内容
用postman增加一个自定义的请求头,key=id,value=1。那么应该怎么取呢?
代码如下:
def index(request):
id = request.META.get("HTTP_ID")
return HttpResponse("你的id:%s"%id)
注意:获取自定义的请求头属性值时,需要添加前缀 HTTP_ 并转成大写,作为键来获取值
附录(获取各种请求参数的方法):
| Attribute | Description |
|---|---|
| path | 请求页面的全路径,不包括域名端口参数。例如: /users/index |
| method | 一个全大写的字符串,表示请求中使用的HTTP方法,常用值:GET, POST,DELETE,PUT等。以下三种为 GET 请求:
|
| user |
|
| GET | 类似字典的 QueryDict 对象,包含url中所有的查询字符串参数 |
| POST | 类似字典的 QueryDict 对象,包含 POST 请求的所有键值对参数(表单数据) |
| body | 获取原始的请求体数据,获取到的数据为bytes类型 |
| FILES | 一个类似于字典的对象,包含所有的上传文件 |
| META | python 字典类型,封装了请求头headers中的数据- REMOTE_ADDR – 客户端的IP地址 - REQUEST_METHOD — 一个字符串,例如"GET" 或"POST- CONTENT_TYPE – 请求的正文的MIME 类型注意:对于用户添加到请求头中的键值,Django会给键加上前缀 HTTP_再转换成大写,再把键值保存到request.META中 |
| COOKIES | 一个标准的 python 字典,包含所有的 cookies, 键和值都是字符串 |
| session | 可读可写的类似字典的对象: django.contrib.sessions.backends.db.SessionStore。Django 提供了 session 模块,默认就会开启用来保存 session 数据 |
QueryDict对象:
- 所在的包:
django.http.QueryDict HttpRequest对象中的GET和POST属性 都是QueryDict类型- 与python字典不同:QueryDict对象一个键可以保存多个值
get()方法- 根据键获取值
- 如果一个键同时拥有多个值,将获取最后一个值
如果键不存在则返回None值,可以设置返回自定义的默认值
dict.get('键',默认值)
getlist()方法- 根据键获取多个值,值以列表返回
如果键不存在则返回空列表[]
dict.getlist('键',默认值)
CP https://www.cnblogs.com/chichung/p/9873425.html
Django 请求参数的更多相关文章
- django获取请求参数
1.获取URL路径中的参数 需求:假设用户访问127.0.0.1/user/1/2,你想获取1,2.应该怎么操作呢? (1)未命名参数(位置参数) # 在项目下的urls.py下增加设置: url(r ...
- django 修改 request 对象中的请求参数, 并重新赋值给 request 对象
直接上代码, 实现流程看代码及注释 def your_view(self, request): method = request.method if method == "GET" ...
- 爬虫 http原理,梨视频,github登陆实例,requests请求参数小总结
回顾:http协议基于请求响应的方式,请求:请求首行 请求头{'keys':vales} 请求体 :响应:响应首行,响应头{'keys':'vales'},响应体. import socket soc ...
- Django - Ajax - 参数
一.Jquery实现Ajax url type data success error complete statusCode {% load staticfiles %} < ...
- django-rest-framework解析请求参数
django-rest-framework解析请求参数 前言 前面的文章中编写了接口, 调通了接口文档. 接口文档可以直接填写参数进行请求, 接下来的问题是如何接受参数, 由于请求方式与参数序列化形式 ...
- Django框架深入了解_01(Django请求生命周期、开发模式、cbv源码分析、restful规范、跨域、drf的安装及源码初识)
一.Django请求生命周期: 前端发出请求到后端,通过Django处理.响应返回给前端相关结果的过程 先进入实现了wsgi协议的web服务器--->进入django中间件--->路由f分 ...
- Django请求生命周期和ORM
dajngo请求生命周期 django请求生命周期是:当用户在browser点击URL后,在django后台都发生了什么. 请求响应Http 1.发送Http请求 2.服务器接收,根据请求头中url在 ...
- Django框架10 /sweetalert插件、django事务和锁、中间件、django请求生命周期
Django框架10 /sweetalert插件.django事务和锁.中间件.django请求生命周期 目录 Django框架10 /sweetalert插件.django事务和锁.中间件.djan ...
- DRF对Django请求响应做了技术升级
Django视图是用来处理请求和响应的,Django默认是按Form和Template来设计的,如果要处理以JSON格式为主的RESTful API,那么就需要对Django请求和响应的处理代码进行优 ...
随机推荐
- hive 0.12.0版本 问题及注意事项
下载地址: http://archive.cloudera.com/cdh5/cdh/5/hive-0.12.0-cdh5.1.5.tar.gz 用远程mysql作为元数据存储 创建数据库,设置字符集 ...
- 搭建互联网架构学习--006--duboo准备之zk集群部署安装
dubbo集群部署安装依赖于zookeeper,所以先安装zookeeper集群. 1.准备三台机器做集群 2.配置 配置java环境 ,2,修改操作系统的/etc/hosts文件,添加IP与主机名 ...
- java数据结构之(堆)栈
(堆)栈概述栈是一种特殊的线性表,是操作受限的线性表栈的定义和特点•定义:限定仅在表尾进行插入或删除操作的线性表,表尾—栈顶,表头—栈底,不含元素的空表称空栈•特点:先进后出(FILO)或后进先出(L ...
- ubuntu安装maven
1.安装maven前需要安装JDK 2.下载mavenapache-maven-3.3.9-bin.tar.gz 3.解压maven到当前目录tar -zxvf apache-maven-3.3.9- ...
- Kafka—性能逆天的存在
0.引言 Kafka是LinkedIn开源出来的一款消息服务器,用Scala语言实现:这货的性能是百万级的QPS(估计是挂载了多块磁盘),我随便写个测试程序就是十万级. 1.Kafka基本概念 在Ka ...
- php通过生成动态变量(变量名中还有变量)
借鉴:http://blog.sina.com.cn/s/blog_7193eeac0100zwld.html 如果想for循环生成变量 如: $a1,$a2,$a3.... $name = &quo ...
- C++中对象模型
C++面向对象语言一大难点是继承,但又是不得不掌握的.简单的继承是很容易理解的,但是当涉及到多继承,设计到虚函数的继承,特别是涉及到虚继承时,问题就会变得复杂.下面的内容来自参考资料中的三篇文章.C+ ...
- Android之网络丢包事件
原文链接 http://www.litrin.net/2013/03/01/android%E4%B9%8B%E7%BD%91%E7%BB%9C%E4%B8%A2%E5%8C%85%E4%BA%8B% ...
- 解决火狐浏览器安装不上Selenium IDE插件“此附加组件无法安装”
(摘自http://blog.sina.com.cn/s/blog_14eea47cb0102w25n.html) 解决火狐浏览器安装不上Selenium IDE插件“此附加组件无法安装” 1.打开火 ...
- JAVA-7NIO之Socket/ServerSocket Channel
一.ServerSocketChannel Java NIO中的 ServerSocketChannel 是一个可以监听新进来的TCP连接的通道, 就像标准IO中的ServerSocket一样.Ser ...