小谈Django中的request对象
request对象
- request.method 请求方法 GET , POST , ...
- request.path_info 当前路径 不包含IP和端口 也不包含参数 ;
- request.get_full_path() 这是一个方法 , 其他都是属性 ; 当前路径 不包含IP和端口 但是包含参数 ;
- request.GET url上携带的参数 键值对 ;
- request.GET.get()
- request.GET.getlist()
- request.POST form表单提交POST请求的参数 键值对 ;
- request.body 请求体 : get请求是空 , post请求才有 : form表单提交的键值对( b'name=xxx' ) ;
- request.POST 不一定有数据 : 能拿到数据 , 是有要求的(
- request.COOKIES cookie的字典 ;
- request.session session的数据 ;
- request.FILES 上传文件 form表单指定的编码类型必须是form-data( <form enctype="multipart/form-data" ) ;
- request.META 请求头的信息 , 还有一些其他信息 , 信息很多 ; 并且请求头的信息的键的名称不一样 : 小写变成大写 ; 前面加上HTTP_ ; -变成了_ ;
---------------上面是属性 , 下面是方法---------------------
- request.get_host() 获取主机地址
- request.get_full_path() 这是一个方法 , 其他都是属性 ; 当前路径 不包含IP和端口 但是包含参数
- request.get_signed_cookie() 获取加密cookie
- requet.is_secure() 如果请求是安全的 , 则返回True ; 即请求是通过 HTTPS 发起的 .
- request.is_ajax() 判断请求是否是ajax请求 : 是返回True ; 不是则返回False ;
request.GET
qd = request.GET
# qd的type就是 QueryDict; qd就是一个QueryDict的对象
# <QueryDict: {'page': ['1'], 'query': ['11'], 'xxx': ['ssss']}> <class 'django.http.request.QueryDict'>
print(qd,type(qd))
# 可以编辑; 如果不修改_mutable参数,修改会报错
qd._mutable = True
qd['page'] = 1
# 显示的结果是 page=1&query=11&xxx=111
print(qd.urlencode())
qd.copy() # 深拷贝,可以编辑
from django.http.request import QueryDict
request.POST
def reg(request):
form_obj = RegForm()
if request.method == 'POST':
form_obj = RegForm(request.POST)
print(request.POST)
# <QueryDict: {'csrfmiddlewaretoken': ['fuFuf9TxgAvfrBZLAB8ucGqHPxZJcfZSBKoJE4oP84lFIRCsZRzOI7xjXhnnVH9R'], 'username': ['test@qq.com'], 'password': ['test1234'], 're_password': ['test1234'], 'mobile': [''], 'name': ['test'], 'department': ['1']}>
if form_obj.is_valid():
form_obj.save()
return redirect('login')
return render(request, 'reg.html', {'form_obj': form_obj})