当前位置: 首页 > news >正文

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中间件

相关文章:

  • 嵌入式软件调试的发展历程
  • PT_连续型随机变量/分布函数/概率密度
  • Python告别pip手动安装模块,实现全自动安装第三方库,彻底解放你的双手
  • 文件目录操作——Linux命令核心
  • Taichi 加速 Python 中图像处理
  • Vue--》MVVM模型在Vue中的使用
  • 迷宫求解(云南大学)
  • 【夜读】坚持这5个习惯,遇见更优秀的自己
  • 算法与数据结构【30天】集训营——平衡二叉树的LL、RR、LR、RL调整的简单快速方法(16)
  • Java本地搭建宝塔部署实战医药WMS进销存源码
  • 基于meanshift算法的目标聚类和目标跟踪matlab仿真
  • Google Earth Engine ——把reducer统计的数据分别放在不同的列表中打印出来,使用unzip()函数
  • Ubuntu 18.04 LTS PWN安装
  • @Bean注解详解
  • Python学习笔记(十二)——面向对象三与运算符的重载
  • “Material Design”设计规范在 ComponentOne For WinForm 的全新尝试!
  • 【知识碎片】第三方登录弹窗效果
  • Android系统模拟器绘制实现概述
  • Apache Zeppelin在Apache Trafodion上的可视化
  • C# 免费离线人脸识别 2.0 Demo
  • CSS 专业技巧
  • eclipse的离线汉化
  • EventListener原理
  • gulp 教程
  • iOS编译提示和导航提示
  • JavaScript/HTML5图表开发工具JavaScript Charts v3.19.6发布【附下载】
  • java第三方包学习之lombok
  • JS实现简单的MVC模式开发小游戏
  • Linux编程学习笔记 | Linux IO学习[1] - 文件IO
  • PAT A1050
  • php的插入排序,通过双层for循环
  • Rancher-k8s加速安装文档
  • select2 取值 遍历 设置默认值
  • tab.js分享及浏览器兼容性问题汇总
  • 电商搜索引擎的架构设计和性能优化
  • 读懂package.json -- 依赖管理
  • 更好理解的面向对象的Javascript 1 —— 动态类型和多态
  • 和 || 运算
  • 缓存与缓冲
  • 简单基于spring的redis配置(单机和集群模式)
  • 硬币翻转问题,区间操作
  • 怎样选择前端框架
  • gunicorn工作原理
  • ​比特币大跌的 2 个原因
  • # centos7下FFmpeg环境部署记录
  • #define、const、typedef的差别
  • #pragam once 和 #ifndef 预编译头
  • (1)Map集合 (2)异常机制 (3)File类 (4)I/O流
  • (4)(4.6) Triducer
  • (Java)【深基9.例1】选举学生会
  • (一)Linux+Windows下安装ffmpeg
  • (一)spring cloud微服务分布式云架构 - Spring Cloud简介
  • (已解决)什么是vue导航守卫
  • (转载)从 Java 代码到 Java 堆
  • ./include/caffe/util/cudnn.hpp: In function ‘const char* cudnnGetErrorString(cudnnStatus_t)’: ./incl