python笔记
Django请求的生命周期
1、执行遵循 wsgi 协议的模块,本质上就是一个 socket 服务端,用于接收用户请求,并将请求解析和初次封装,然后交给框架(Flask、Django)。
2、中间件,帮助我们对请求进行校验或在请求对象中添加其它相关数据,例如:csrf、session。
3、路由匹配。
4、视图函数(业务处理:ORM、模板渲染...)。
4、中间件,对响应的数据进行处理。
5、wsgi 返回响应到浏览器。
相关链接:wsgiref实现的webserver。
什么是wsgi?
web 服务网关接口。解析和封装请求内容。
实现该协议的模块:wsgiref 、werkzurg 、uwsig。
什么是FBV和CBV?
给路由分配执行函数的两种方式。FBV 直接执行定义的函数,而 CBV 是通过 as_view 方法返回的 view 函数来间接执行我们定义的函数。
相关链接:Django中CBV源码解析。
restful规范
1、请求接口时,通过不同的请求方式来执行不同的操作,例如 get 用来获取数据、delete 用来删除数据、post 用来添加数据、put 用来整体更新数据、patch 用来更新局部数据。
2、面向资源编程,url 中的参数使用名词。
3、体现版本。
4、根据 url 区分资源类型(是 API 还是网页)。
5、https。
6、响应式设置状态码。
7、条件限制。
8、返回值。
9、返回错误信息。
10、Hypermedia Link。
djangorestframework组件
路由:
- 可以通过 as_view 传递参数,根据请求方式执行相应的方法。
视图:
- 帮助开发者提供了一些类,并在类中提供了多个方法供使用。
版本:
- 在 url 中设置 version 参数,用户请求的时候传入参数。在 request.version 中获取版本,根据版本不同做不同处理。
认证:
- 自定义认证类,在 authticate 方法中编写逻辑。
- 返回元组(例:user,path),标识认证成功。
- 抛异常:raise AuthticateFaild(...),表示认证失败。
- 返回None,表示匿名登陆。
权限:
- 自定义权限类,在 has_permission 方法中编写验证逻辑。
- 返回 True,认证通过。
- 返回 False,认证失败。
频率:
- 自定义频率类,在类的 allow_request/wait 方法中编写逻辑。
- 返回 True,可以访问。
- 返回 False,wait 将执行。
解析器:
- 根据 content-type 请求头的值对请求体中的数据选择不同的解析器进行解析。
分页:
- 对从数据库中获取到的数据进行分页处理:SQL -> limit offset。
- 根据页码。
- 根据索引。
- 根据加密。(防止手动输入大页码)
页码越大速度越慢,为什么以及如何解决?
原因:页码越大向后需要扫描的行数越多,因为每次都是从 0 开始扫描。
解决:
- 限制显示的页数。
- 记录当前页数据 id 的最大值和最小值,查询时加 where 条件先筛选。
序列化:
- 对 queryset 序列化以及对请求数据格式校验。
渲染器:
-根据 url 中传入的 format 参数或后缀,决定数据如何渲染到页面上。
Http协议
Http 协议就是对传输数据的格式的一个规范。
刚开始学习 Django 时,自己使用 socket 实现了一个 webserver,浏览器充当客户端。更清楚的明白了http协议是什么?
-请求头 请求体
-响应头 响应体
一次请求响应后断开连接。
常见请求头
UserAgent、Cookie、Referer、ContentType、Origin。
常见请求体
一般根据 ContentType 区分,常见的有 application/x-www-form-urlencoded、application/json、multipart/form-data。
Django中间件的五个方法
process_request、process_view、process_template_response、process_exception、process_response。
应用场景:
1、登录认证,不用再在每个视图函数中添加装饰器。
2、权限:用户登录时获取当前用户所有权限放入session,当访问页面时,获取当前 url 并在 session 中进行匹配。如果没有匹配成功,则在中间件返回权限不足。
3、跨域:
- jsonp,动态创建 script 标签。
- cors,设置响应头。
应用:本地前后端分离时使用。
相关链接:中间件。
django rest framework 的作用
快速搭建基于 restful 规范的接口。
你理解的restful规范
restful 是一个规范,也就是对我们编写 api 的一种良性约束。通过它可以让我们的 api 更简洁可维护。
如果代码出现bug,如何解决?
创建一个 bug 分支,在该分支上处理完毕后合并到 master 分支。删除 bug 分支,回到 dev 分支继续开发。
Flask中g的生命周期?g和session一样吗?g和全局变量一样吗?
g 的生命周期是一次请求;g 和 session不一样,session 使用 cookie 保持了状态;g 和全局变量不一样,g 会在每次请求到来的时候创建,请求结束的时候销毁,而全局变量不会。
Flask中app_ctx和ctx为什么要分两个Local对象存储?
因为 ctx 保存的是 request 和 session,app 和 g 的信息也保存在 ctx,那么只有在请求时才能拿到,为了能在离线脚本拿到 app 和 g 的信息,所以将 ctx 和 app_ctx 分开存储了。
索引
作用:加速查找 + 约束。
种类:
- 主键索引:加速查找、不重复、非空;
- 唯一索引:加速查找、不重复;
- 普通索引:加速查找;
- 联合索引:加速查找;
- 联合唯一索引:加速查找、不重复;
ps:联合索引遵循最左前缀原则(查询时过滤字段包含最左边字段即可命中索引)。
名词:
- 覆盖索引:在索引文件中就可以把想要的数据拿到。
- 索引合并:使用多个单列索引去查找数据。
Java博客目录 | Python博客目录 | C#博客目录

浙公网安备 33010602011771号