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