Django-06-DjangoView-02
HttpRequest
服务器在接收到Http请求后,会根据报文创建HttpRequest对象
视图中的第一一个 参数就是HttpRequest对象
Django框架会进行自己的包装,之后传递给视图
属性
- path 请求的完整路径
- method 请求的方法,常用GET,POST
- encoding 编码方式,常用utf-8
- GET 类似字典的参数,但是一个key可以有多个值,包含了get的所有参数
- 通常有get()获取一个,getlist()获取多个
- POST 类似字典的参数,包含了post所有参数
- FILES 类似字典的参数,包含了上传的文件
- COOKIES 字典,包含了所有COOKIE
- session 类似字典,表示会话
- META 各种客户端元信息
方法(部分)
- is_ ajax() 判断是否是ajax(),通常用在移动端和js中
HttpResponse
服务器返回给客户端的数据
HttpResponse由程序猿自己创建
不使用模板,直接HttpResponse()
调用模板,进行渲染
先load模板,再渲染
直接使用render一步到位
render(request,template_ name[,context])- request 请求体对象
- template_ name 模板路径
- context 字典参数,用来填坑
属性
- content 返回的内容
- charset 编码格式
- status. code 响应状态码(200,3xx,404,5xx)
- content-type MIME类型 百科请参照https://baike.baidu.com/item/MIME/2900607?fr=aladdin
方法(部分)
- init 初始化内容
- write(xxx) 直接写出文本
- flush()冲刷缓冲区
- set_cookie(key,value= xxx ,max age=None,exprise=None)
- delete cookie(key) 删除cookie, 上面那个是设置
HttpResponse子类
HttpResponseRedirect
也可以通过导包简写成redirect
响应重定向:可以实现服务器内部跳转return Http.ResponseRedict(/grade/2017')
使用的时候推荐使用反向解析
JsonResponse
返回Json数据的请求,通常用在异步请求上
JsonResponse. ( dict )
也可以使用_ init (self.data) 设置数据
Content-type自动设置为application/json
其他(部分)
- HttpResponsePermanentRedirect
- 重定向,永久性
- 301
- HttpResponseBadRequest
- 400
- HttpResponseNotFound
- 404
- HttpResponseForbidden
- 403
- HttpResponseNotAllowed
- 405
- HttpResponseServerError
- 500
- Http404
- Exception
- raise 主动抛异常出来
会话技术
摘要
- 出现场景
- 服务器如何识别客户端
- Http在Web开发中基本都是短连接
- 请求生命周期
- 从Request开始
- 到Response结束
- 种类
- Cookie
- 客户端会话技术
- 数据存储在客户端
- 键值对存储
- 支持过期时间
- 默认Cookie会自动携带,本网站所有Cookie
- Cookie不能跨域名,跨网站
- 通过HttpResponse
- Cookie默认不支持中文
- 可以加盐
- 加密
- 获取的时候需要解密
- 客户端会话技术
- Session
- 服务端会话技术
- 数据存储在服务器中
- 默认Session存储在内存中
- Django中默认会把Session持久化到数据库中
- Django中Session的默认过期时间是14天
- 主键是字符串
- 数据是使用了数据安全
- 使用的base64
- 在前部添加了一个混淆串
- Session依赖于Cookie
- Token
- 服务端会话技术
- 自定义的Session
- 如果Web页面开发中,使用起来和Session基本一致
- 如果使用在移动端或客户端开发中,通常以Json形式传输,需要移动端自己存储Token,需要获取Token关联数据的时候,主动传递Token
- Cookie和Session,Token对比
- Cookie使用更简洁,服务器压力更小,数据不是很安全
- Session服务器要维护Session,相对安全
- Token拥有Session的所有优点,自己维护略微麻烦,支持更多的终端
- Cookie
Cookie
浏览器端的会话技术
cookie本身由浏览器生成,通过Response将cookie写到浏览器上,下一次访问,浏览器会根据不同的规则携带cookie过来
response.set_cookie(key,value[,max_age=None,exprise=None])
request.GET.get(key,defaultvalue)
cookie不能跨浏览器
response.set_cookie(key,value,max_age=None,exprise=None)
max_age: 整数,指定cookie过期时间
expries : 整数,指定过期时间,还支持是一个datetime或 timedelta,可以指定一个具体日期时间
max_age和expries两个选一个指定
过期时间的几个关键时间
max_age 设置为 0 浏览器关闭失效
设置为None永不过期
expires=timedelta(days=10) 10天后过期

Session
服务器端会话技术,依赖于cookie
django中启用SESSION
settings中
INSTALLED_APPS:
'django.contrib.sessions'MIDDLEWARE:
'django.contrib.sessions.middleware.SessionMiddleware'
每个HttpRequest对象都有一个session属性,也是一个类字典对象
常用操作
get(key,default=None)根据键获取会话的值clear()清除所有会话flush()删除当前的会话数据并删除会话的cookiedel request.session['xxx']删除会话session.session_key获取session的key设置数据
request.session[‘user’] = username数据存储到数据库中会进行编码使用的是Base64
CSRF
- 防跨站攻击
- 防止恶意注册,确保客户端是我们自己的客户端
- 使用了cookie中csrftoken 进行验证,传输
- 服务器发送给客户端,客户端将cookie获取过来,还要进行 编码转换 (数据安全)
- 添加
{ % csrf_token % }即可 - 如何实现的
- 在我们 存在csrf_token 标签的页面中,响应会自动设置一个cookie, csrftoken
- 当我们提交的时候,会自动验证csrftoken
- 验证通过,正常执行以后流程,验证不通过,直接403
算法
- 编码解码
- Base64
- urlencode
- 摘要算法,指纹算法,杂凑算法
- MD5,SHA
- MD5 默认是128的二进制
- 32位的十六进制
- 32位的Unicode
- 单向不可逆的
- 不管输出多长,输出都是固定长度
- 只要输入有任意的变更,输出都会发生巨大的变化
- MD5,SHA
- 加密
- 对称加密
- 一把钥匙
- DES,AES
- 加密解密效率高
- 钥匙一旦丢失,所有数据就全玩完了
- 非对称加密
- 两把钥匙,成对的
- 公钥和私钥
- RSA,PGP
- 安全性最高
- 算法复杂,需要时间长
- 支付宝,微信都是RSA
- 对称加密
思维导图





