一、request对象常用属性
- request对象:
HttpRequest
类型的实例
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对象(python字典不同:QueryDict对象一个键可以保存多个值,单个get获取,多个getlist获取)
三、客户端传递请求参数的几种方式
1、通过 URL路径(path)传递,例如:http://127.0.0.1:8000/news/1/2,两个参数:新闻类别id 和 页码
2、通过 query string 查询字符串传递
例如:http://127.0.0.1:8000/news?category=1&page=2
3、通过 body 请求体传递,又可根据传递的数据格式,分为:
3.1、表单数据
3.2、非表单数据(json, xml)
四、获取请求参数
1. 获取查询字符串
查询字符串的获取通过 request.GET 属性,
需求: 获取URL地址 http://127.0.0.1:8000/news2?category=1&page=2 中的查询字符串的值
# url配置
url(r'^news2$', views.news2),
# 视图函数
def news2(request):
category = request.GET.get('category')
page = request.GET.get('page')
# ?category=1&page=2&a=3&a=4
# a = request.GET.getlist('a') # 一键多值通过 getlist 获取
text = '获取查询字符串:<br/> category=%s, page=%s' % (category, page)
return HttpResponse(text)
注意:查询字符串的获取与请求方式无关:不管是 GET 还是 POST请求,都可以通过request.GET 属性来获取
2. 获取请求体数据
可以发送请求体数据的请求方式有POST、PUT、PATCH、DELETE。
请求体数据格式不固定,可以是:表单类型数据,可以是非表单数据,如:JSON,xml等,获取请求体数据时,应区分对 待。
2.1 获取表单数据 Form Data
request.POST:获取post请求中的表单类型的数据
# url配置
url(r'^news3$', views.news3),
# 视图函数
def news3(request):
category = request.POST.get('category')
page = request.POST.get('page')
# 一键多值通过从POST中用 getlist 获取
# ?category=1&page=2&a=3&a=4
# a = request.POST.getlist('a')
text = '获取body中的键值对:<br/> category=%s, page=%s' % (category, page)
return HttpResponse(text)
注意:request.POST 只能用来获取POST方式的请求体表单数据。
2.2 非表单类型 Non-Form Data
request.body属性:获取非表单类型的请求体数据,如:JSON、XML等,获取到的数据类型为bytes类型
获取数据后,自己解析数据取出参数
例如:获取请求体中的json数据: {"category": 1, "page": 2}
# url配置
url(r'^news4$', views.news4),
import json
def news4(request):
# 获取json字符串
json_str = request.body
json_str = json_str.decode() # python3.6 无需执行此步
# 解析json
dict_data = json.loads(json_str)
category = dict_data.get('category')
page = dict_data.get('page')
text = '获取body中的json数据: category=%s, page=%s' % (category, page)
return HttpResponse(text)
3. 获取请求头数据
可以通过request.META属性获取请求头headers中的数据,request.META为字典类型。