django梳理
概述
1. 框架推导流程
web框架_Yietong309的博客-CSDN博客
前期准备知识
2. django请求生命周期流程图
客户端发送HTTP发送request请求,经过网关发送到中间件,在经过路由层,视图层,模型层/模板层【这两个都与视图层打交道:模板层与视图层有模板语法传值,模型层还会与数据库打交道】然后返回给中间件进行数据安全校验,再发送给网关【经过wsgi协议】封装成数据响应response给客户端。
HTTP 》》web网关》》中间件》》路由views>>【templates》》models》》】,【models》》MySQL】《《views《《中间件校验数据《《web网关经过wsgi协议封装后响应给浏览器。
Django 项目的创建及常见问题_Yietong309的博客-CSDN博客
Django--request 对象_Yietong309的博客-CSDN博客_django的request对象
HttpResponse响应、render 响应、redirect 响应、JsonResponse 响应_Yietong309的博客-CSDN博客_httpresponse render
3. 中间件
中间件走势, 使用场景
自定义的5个方法
django中间件类似于django的门户 所有的请求来和响应走都必须经过中间件
django默认自带七个中间件 每个中间件都有各自负责的功能
django中间件除了默认的之外 还支持自定义中间件(无限)
django中间件使用场景
全局相关的功能:
全局用户身份校验 全局用户黑名单校验 全局用户访问频率校验
django自定义中间件中可以有五个方法
process_request
process_response
process_view
process_template_response
process_exception
1.process_request
1.请求来的时候会按照配置文件中注册了的中间件 从上往下依次执行每一个中间件里面的process_request方法 如果没有则直接跳过
2.该方法如果返回了HttpResonse对象 那么请求不会再往后执行 原路返回
2.process_response
1.响应走的时候会按照配置文件中注册了的中间件 从下往上一次执行每一个中间件里面的process_response方法 没有没有则直接跳过
2.该方法有两个形参request和response 并且默认情况下应该返回response
3.该方法也可以自己返回HttpResponse对象 相当于狸猫换太子
ps:如果请求的过程中process_request方法直接反悔了HttpResponse对象那么会原地执行同级别process_response方法返回(flask则不同)
3.process_view
当路由匹配成功之后 执行视图函数之前 自动触发
4.process_excption
当视图函数报错之后 自动触发
5.process_template_response
当视图函数返回的数据对象中含有render属性对应render函数才会触发
csrf及auth模块_Yietong309的博客-CSDN博客
4. 路由层 urls.py
Django之路由层_Yietong309的博客-CSDN博客
路由匹配成功之后会调用视图函数, 默认情况下会自动给视图函数传递一个request位置参数。 如果路由中有括号对正则进行分组,优先将括号内的内容匹配【位置参数】。即无名分组, 有名分组就是给它起个别名【关键字参数】。
使用情况: 单个的可以重复使用, 两者不能混用。
反向解析》》 有/无名分组反向解析 》》 目的: 找到路由进行匹配
路由分发: 多项目并行。 各自有路由, 避免重名, 也可以用namespace。。
5. 视图层 views.py
四十三、视图层_许小许520的博客-CSDN博客
网页伪静态 a.html
视图函数有返回值,httpresponse 对象
返回json格式字符串》》 import JsonResponse 直接返回json格式, 可代替httpresponse
乱码情况》》{ json-dump-parmas: {ensureascii:false}} [只能字典, 其他数据类型要+safe=false
form表单文件 method属性》》post。 enctype >>默认multpls/form-data, 还有encloded, json
后端获取文件 request.files>>>.get()可读
FBV与CBV
FBV与CBV, CBV源码剖析_Yietong309的博客-CSDN博客
CBV根据请求方式的不同子佛能够识别并匹配路由
6. 模板层
模板语法传值 {{变量名}} {% 逻辑 %}
locals(), / {name:name}
只支持句点符取值
过滤,类似于内置函数, length,add/...
forloop>>for循环
自定义标签, 过滤器 templatetags, inclsion tag
Django--inclusion_tag_Yietong309的博客-CSDN博客
py文件内引入四句话就能进行代码执行
前端页面 {% load mytag %}
自定义函数
simpletag/ inclsiontag()
模板继承与导入
Django 模板的导入与继承_Yietong309的博客-CSDN博客
继承 extend >> block super()进行过更改 三个区域
导入》》导入某个部分 {% Include a.html %}
Django 不同版本的区别--路由层与模板层_Yietong309的博客-CSDN博客
7. 模型层 models。py
Django链接MySQL_Yietong309的博客-CSDN博客
ORM基本操作_Yietong309的博客-CSDN博客
Django-ORM 单表查询_Yietong309的博客-CSDN博客
Django--ORM 多表查询_Yietong309的博客-CSDN博客_django orm 连表查询
py文件内引入四句话就能进行代码执行
ORM 关键字 双下线, 查看底层SQL, 外键,
正反向查询,子查询,,连表查询, 聚合查询【aggregate],分组查询[annotate], 分组前后查询条件
filter 在annotate前后 where/ having
F查, 查表里的字段,到模块
Q查, 逻辑, 字符串搜索
ORM优化查询 only & defer , prefetch_related/select_related
查的字段能否点出来, 走不走数据库查询
ORM 单表记录与字段操作_Yietong309的博客-CSDN博客
事务特性acid
MySQL 事务隔离级别,读现象,MVCC_Yietong309的博客-CSDN博客
ORM字段及参数Django--ORM 常用字段及属性介绍_Yietong309的博客-CSDN博客
四种表关系, 第三张表创建方式
orm查询相关
8. Ajax 异步提交,局部刷新Ajax简介_Yietong309的博客-CSDN博客
序列化 serializer
分页器 bulk_create/update 渲染》》 divmod()
9. form 组件 form组件源码
校验数据 钩子 钩子函数和forms组件_Yietong309的博客-CSDN博客_cookie钩子
渲染页面 {% for xx in xx_obj %}
p {{ form.label}} {{form}} p
展示信息 错误提示
model form组件 fields = '__all__' instance参数
django自带的序列化组件_Yietong309的博客-CSDN博客
10. cookie, session
客户端, 浏览器 》》》token
登录设置cookie,装饰器校验多个视图函数校验用户是否登录,
session 14天, 字典 request.session['name'] = 'jason'赋值加密 request.session.get('name')比对解密展示 5种存session的方式 delete/ flush/set_expiry(v)
cookie, session 与 token --JWT_Yietong309的博客-CSDN博客
django操作session、django中间件简介、五个常见方法、CBV添加装饰器的三种方式、csrf跨站请求伪造_Yietong309的博客-CSDN博客_django session中间件