Django 请求生命周期
浏览器
遵循 HTTP协议:超文本传输协议
- 请求首行
- 请求头
- \r\n
- 请求体
四大特性:
- 基于请求响应
- 基于TCP/IP之上,作用域应用层的协议
- 无状态
- 无连接
数据格式:contentType
- urlencoded :form 与 Ajax 默认的
- formdata : form表单传输文件
- josn : Ajax使用
- 补充: Ajax 传输文件使用内置对象:new Formdata()
Django后端
<1> wsgiref (web服务网关接口)
作用:将HTTP协议的数据格式切分成字典的形式
特点:是django自带的,本身效率不高,仅支持1000左右的并发量,后期上线后会换成wsgi
问: WSGI 与 wsgiref,uwsgi是什么关系?
答:WSGI 是协议,wsgiref与uwsgi都是实现该协议的功能模块
<2>django中间件
作用:安保,请求会依次经过注册了的中间件到达路由层
应用:对所有请求或一部分请求做批量处理
特点:django默认七个中间件,并有五种自定义方法
补充:当请求到达某一个中间件时会先到缓存中查看是否有缓存,若有则直接响应到浏览器,不在走后端,若没有则继续向后端请求,当后端处理完向前端的响应到达某个中间时会给前端一份,在缓存中存一份.
<3>urls(路由层)
作用:将请求的功能与对应的功能函数做分发处理
知识点:
- 静态路由(普通路由)
- 动态路由 :有名分组,无名分组,
- 反向解析(路由起别名),
- 名称空间,路由分发(include)
<4>views(视图函数)
作用:核心逻辑的处理
两大类:FBV 与 CBV
知识点:
- froms组件 :1.渲染页面, 2.校验数据, 3.展示信息 局部钩子,全局钩子 链接
- auth模块 : 校验用户认证相关 链接
- cookie 与 session 连接
- 注意:逻辑处理完成向浏览器响应时,也要一次经过中间件,到达wsgiref打包成HTTP协议格式后发生到浏览器
<5.1>templates(模板层)
作用:html页面
知识点:
- 模板语法 {{ 变量相关 }} , { % 逻辑相关 % };
- 模板导入{% include 'beautiful.html' %},
- 模板继承,{% extend 模板名.html %}, {% block 块名 %}
- 自定义标签,自定义过滤器,inclusion_tag
- csrf 跨站请求伪造{% csrf_token %} 注意:Ajax请求时有三种方式
<5.2>models
作用:对象系映射(创建表)
知识点:
- 数据库迁移命令: python3 manage.py makemigrations / python3 manage.py migrate
- 增删改查(create,delete,update,all,filter),双下划线查询(__gt, __lt, __in=[ ], __range=[ ],......),
- 聚合查询
- 分组查询
- F 与 Q 查询
- only 与 defer
- select_related 与 prefetch_related
- 补充:模型表中的外键字段可以看做是被关联表中的一条记录(即对象),正向外键字段,反向表名小写
数据库
django连接数据库(如:MySQL)
<1>在settings.py文件中配置
<2>在项目或app中的__init__.py文件中声明
知识点:
- 查询 (单表,多表)
- 索引 连接
- 查询优化