1. 请求 request
1.1 HttpRequest 定义
服务器在接收到http请求后,会根据报文创建HttpRequest对象
视图中第一个参数就是HttpRequest对象
Django框架会进行自己的包装,之后传递给视图
属性:
path 请求的完整路径
method 请求的方法,通常get,post
Encoding 编码方式,常用utf-8
Get 类似字典的参数,包含了get的所有参数
post 类似字典的参数,包含了post的所有参数
Files 类似字典的参数,包含了上传的文件
Cookies 字典,包含了所有的COOKIES
Session 类似字典,表示会话
方法: is_ajax() 判断是否是ajax(),通常在移动端和js中
2. GET 和 POST的区别
HTTP: get请求 request.GET
HTTP: post请求 request.POST
url中?后面的内容(get) 不同浏览器对长度有限制 几千到几万bites不等
request.method == 'GET' / 'POST'
GET | POST | |
---|---|---|
后退按钮/刷新 | 无害 | 数据会被重新提交(浏览器应该告知用户数据会被重新提交)。 |
书签 | 可收藏为书签 | 不可收藏为书签 |
缓存 | 能被缓存 | 不能缓存 |
编码类型 | application/x-www-form-urlencoded | application/x-www-form-urlencoded 或 multipart/form-data。为二进制数据使用多重编码。 |
历史 | 参数保留在浏览器历史中。 | 参数不会保存在浏览器历史中。 |
对数据长度的限制 | 是的。当发送数据时,GET 方法向 URL 添加数据;URL 的长度是受限制的(URL 的最大长度是 2048 个字符)。 | 无限制。 |
对数据类型的限制 | 只允许 ASCII 字符。 | 没有限制。也允许二进制数据。 |
安全性 | 与 POST 相比,GET 的安全性较差,因为所发送的数据是 URL 的一部分。在发送密码或其他敏感信息时绝不要使用 GET ! | POST 比 GET 更安全,因为参数不会被保存在浏览器历史或 web 服务器日志中。 |
可见性 | 数据在 URL 中对所有人都是可见的。 | 数据不会显示在 URL 中。 |
2.响应 response
2.2 响应的QueryDict类型
1)类似字典的结构数据,与字典的区别,可以存在相同的键
2)GET和POST都是QueryDict对象
3)QueryDict中数据获取方式
dict[‘name’] 或者dict.get(‘name’)
获取指定key对应的所有值
dict.getlist(‘name’)
2.3 响应
1)可以直接返回一个HttpResponse对象:
服务器返回给客户端的数据,HttpResponse由程序员自己创建
不使用模板,直接HttpResponse()
2)可以返回模板
调用模板,进行渲染,直接使用render一步到位
返回表达式:
render(request, template_name, context)
request 请求体对象
template_name 模板路径
context 字典参数,用来填坑
3)属性
Content 返回的内容
Charset 编码格式
status_code 响应状态码(200,4xx,5xx)
4xx 客户端的错误
5xx 服务端的错误
content_type MIME类型,定义传输类型的,比如有xml,html,png等等,比如content_type=’image/jpg’
4)方法
init 初始化内容
write(xxx) 直接写到文本
flush 冲刷缓冲区
set_cookie(key, value=’’, max_age=None, exprise=None)
delete_cookie(key) 删除cookie,上面是设置
4)重定向
导入方法 : from django.http import HttpResponseRedirect
HttpResponseRedirect响应重定向:可以实现服务器内部的跳转
Return HttpResponseRedirect(‘/xxx/xxx’)
使用的时候推荐使用反向解析reverse :
from django.urls import reverse
return HttpResponseRedirect(reverse('backweb:index'))
JsonResponse
使用json数据的请求,通常用在异步请求上jsonResponse(dict)
content_type是application/json