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:联合索引遵循最左前缀原则(查询时过滤字段包含最左边字段即可命中索引)。

名词:

  - 覆盖索引:在索引文件中就可以把想要的数据拿到。

  - 索引合并:使用多个单列索引去查找数据。

posted @ 2018-11-27 15:52  zze  阅读(110)  评论(0)    收藏  举报