Day03
会话技术
- 干啥的
- 辅助服务器识别用户(客户端)
- 怎么实现
- 主要有三种
- 内置实现
- Cookie
- Session
- 自定义
- Token
- 内置实现
- 主要有三种
- 啥时候用
- 只要需要识别用户
- 想要用户历史信息
服务器为什么不能识别客户端?
- 服务器面向海量客户端
- 识别难度高,性能低
- 请求生命周期
- 从Request开始,到Response结束
- 目前所使用的Http都是短连接
- HTTP协议是无状态协议
Cookie
- 客户端会话技术
- 数据都存储在客户端
- 也就是存储在浏览器中
- Cookie是服务器给的
- 它是通过Response操作
- 双R
- Request
- 客户端发送给服务器的数据
- Response
- 服务器响应给客户端的数据
- Request
- Cookie特性
- Cookie必须通过Response操作
- Cookie键值存储 key-value
- 请求默认会携带本站所有有效Cookie
- Cookie是以站点为单位的
- 不能跨域名
- 不能跨浏览器
- Cookie支持过期
- 默认是关闭浏览器过期,不关闭永远不过期
- max-age
- 时间段
- expires
- 时间点
- Cookie默认是明文的
- Cookie不支持中文
- 可以通过编解码实现
Session
- 服务端会话技术
- Session依赖于Cookie
- 将session_key作为session_id存储到了cookie中
- Session拥有Cookie所有特性
- Session支持中文
- Session默认存在内存中
- Django中将Session做了数据持久化
- 存在三个字段
- session_key
- session_data
- expire_date
- session_data使用了base64进行了编码
- 存在三个字段
Base64
- 常用的编解码技术
MTV
- Model
- 类
- 模型是可以继承的
- abstract=True
- 抽象的模型不会产生映射
- Template
- HTML + 模板语法
- 继承
- extends
- block
- Views
- def fun():
- 默认支持所有请求方式
- class
- 想支持哪一种请求,需要编写请求方法名字对应的函数
- FBV
- Function Based Views
- CBV
- Class Based Views
- def fun():
View
- 继承
- object
- 属性
- args
- kwargs
- request
- http_method_names
- 方法
- as_view
- setup
- dispatch
- http_method_not_allowed
- options
- 源码阅读
- 从程序入口开始看
- 从它被调用的地方开始看
- @classonlymethod
- 继承
- classmethod
- 只能被类调用,不能被对象调用
- 继承
- as_view
- 参数不能是请求方法的名字
- 参数必须是已经存在的属性
- 定义了view
- 创建自己的对象
- 将所有关键字参数作为自己的属性
- 只要支持get就支持head
- setup
- 记录request
- *args
- **kwargs
- dispatch
- 创建自己的对象
- dispatch
- 根据请求方法的名字的小写去查找对应属性
- 找到了支持
- 没找到就是不允许
- 根据请求方法的名字的小写去查找对应属性
- options
- 默认支持options请求
- 获取支持的请求信息
- 从程序入口开始看
- head请求
- 只要响应头
TemplateView
- 函数
- get
- 默认支持get请求
- get
- 继承
- Mixin结尾的,实际上一种约定俗称的规则,代表我们准备被用在多继承中的
- TemplateResponseMixin
- 属性
- template_name
- template_engine
- response_class
- content_type
- 方法
- render_to_response
- get_template_names
- 属性
- ContextMixin
- 属性
- extra_context
- 方法
- get_context_data
- 属性
- View
- 核心
- 在于分发
- 根据请求方法的名字进行分发
- 核心
getattr
- 获取属性
- 从对象上获取
- getattr(obj, key, default_value)
- 从对象上获取
setattr
- 设置属性
- 向对象上设置
- setattr(obj, key, value)
- 向对象上设置
ListView
- 继承
=
- 赋值符号
- 将后面的值存储到前面的变量中
- 内存划分
- 栈区
- 堆区
- 会存在开辟栈,开辟堆
静态区
- 是缓存了部分固定数据的
- -5到256
- 不管赋值多少次,获取值都是固定的
homework
- 将数据存储到cookie
- 数据包含中文
- 编解码
- 绘制View的分发图
- View执行流程图
- 自己研究DetailView