Django进阶

1.模板

1.1 寻找html模板

TEMPLATES = [{'BACKEND': 'django.template.backends.django.DjangoTemplates','DIRS': [os.path.join(BASE_DIR, 'templates')],'APP_DIRS': True,'OPTIONS': {'context_processors': ['django.template.context_processors.debug','django.template.context_processors.request',# 'django.contrib.auth.context_processors.auth',# 'django.contrib.messages.context_processors.messages',],},},
]

优先去项目根目录 > 每个已注册的app的templates目录找。

如何选择:

  • 简单的项目,模板都放在根目录。
  • 复杂的项目,模板放在各自的app中,公共部分放在templates目录。

扩展:修改内置app的模板也是同样的套路。

1.2 模板处理的本质

渲染完成后,生成了字符串,再返回给浏览器。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-N4vZkh9j-1691468023302)(assets/image-20220703100004360.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Tw7zsCcE-1691468023304)(assets/image-20220703100634467.png)]

1.3 常用语法

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yRptEWnS-1691468023305)(assets/image-20220703104019949.png)]

1.4 内置函数

在django模板语法中提供了内置函数让我们来。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OaMhpcFY-1691468023305)(assets/image-20220703104857782.png)]

1.5 自定义模板功能

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IiFPsS3Z-1691468023305)(assets/image-20220703110604253.png)]

三种方式:

  • filter
- 数据处理,参数:1~2个
- 数据处理,if条件
  • simple_tag
参数无限制 & 返回文本
  • inclusion_tag
参数无限制 & HTML片段

需求来了:根据用户权限不同显示不同的菜单。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vmL6Gj7F-1691468023306)(assets/image-20220703112043922.png)]

1.6 继承和母版

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ms1RLZnv-1691468023306)(assets/image-20220703114930894.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1vAoVHKl-1691468023307)(assets/image-20220703114941168.png)]

1.7 模板的导入

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aXK8Iju4-1691468023307)(assets/image-20220703115519438.png)]

2.django中间件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AuUp6UV7-1691468023308)(assets/image-20220703140649928.png)]

  • 定义方法
  • 注册

2.1 原始方式

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iGqHdEXS-1691468023308)(assets/image-20220703141259948.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-plJe5Z6Z-1691468023308)(assets/image-20220703141313488.png)]

2.2 MiddlewareMixin(建议)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Rlx2DVzo-1691468023309)(assets/image-20220703142923194.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nw6V7voG-1691468023309)(assets/image-20220703142936794.png)]

注意:django1版本。

源码:

  • 面向对象

    class MyMd(object):def __init__(self....):passdef __call__(self,....):passdjango内部默认执行call方法,传入参数。
    
  • 反射

    class MyMd(object):def __init__(self....):passdef __call__(self,....):if hasattr(self,'process_request'):response = self.process_request(request)...django内部默认执行call方法,传入参数。
    
    class MiddlewareMixin:def __init__(self, get_response=None):self.get_response = get_responsedef __call__(self, request):response = Noneif hasattr(self, 'process_request'):response = self.process_request(request)response = response or self.get_response(request)if hasattr(self, 'process_response'):response = self.process_response(request, response)return responseclass MyMd(MiddlewareMixin):def process_request(self,request):...def process_response(self,request, response):...django内部默认执行call方法,传入参数。
    

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JvoSTSDm-1691468023310)(assets/image-20220703145219921.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RnN2ygqP-1691468023310)(assets/image-20220703145158733.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bevndhxT-1691468023310)(assets/image-20220703145210733.png)]

疑问:prcess_request的执行时,是否已执行了路由匹配?

request.resolver_match

注意:process_view是在django中源码中写死了。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wf6jFPje-1691468023311)(assets/image-20220703151639813.png)]

2.3 其他

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lW1V9cmf-1691468023311)(assets/image-20220703153559256.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WxV2CsNi-1691468023312)(assets/image-20220703153616241.png)]

小结

  • 定义中间类
  • 类方法
    • process_request
    • process_view
    • process_reponse
    • process_exception,视图函数出现异常,自定义异常页面。
    • process_template_response,视图函数返回TemplateResponse对象 or 对象中含有.render方法。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wgNYCLYq-1691468023312)(assets/image-20220703155414569.png)]

3.ORM操作

orm,关系对象映射,本质翻译的。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0dAKVXCT-1691468023312)(assets/image-20220703155844071.png)]

3.1 表结构

实现:创建表、修改表、删除表。

在app中的models.py中按照规则编写类 ===> 表结构。

  • 编写类

    from django.db import modelsclass UserInfo(models.Model):name = models.CharField(max_length=16)age = models.IntegerField()
    
  • 注册app

    INSTALLED_APPS = [# 'django.contrib.admin',# 'django.contrib.auth',# 'django.contrib.contenttypes',# 'django.contrib.sessions',# 'django.contrib.messages','django.contrib.staticfiles','apps.app01.apps.App01Config','apps.app02.apps.App02Config',
    ]
    
  • 命令,django根据models中类生成一个 对数据库操作的配置文件 => migrations

    python manage.py makemigrations
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Y5jIoxgK-1691468023312)(assets/image-20220703160914596.png)]

  • 命令,读取已经注册么给app中的migrations目录将配置文件 -> 转换成:生成表,修改表 SQL -> 连接数据库去运行。

    python manage.py migrate
    
    • 那个数据库?
    • 数据库账户和密码?
    DATABASES = {'default': {'ENGINE': 'django.db.backends.sqlite3','NAME': os.path.join(BASE_DIR, 'db.sqlite3'),}
    }
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5IxnhTdl-1691468023313)(assets/image-20220703162050698.png)]

常见问题:请不要再手动去修改数据的表结构 + 时刻保证 ORM和数据表是对应。

3.1.1 常见字段和参数

  • 字段

    CharFieldSmallIntegerField
    IntegerField
    BigIntegerFieldDateField
    DateTimeFieldBooleanField  -> 其实数据库不支持真假,根据SmallIntegerField创造出来出来。 0  1DecimalField  -> 精确的小数
    
  • 参数

    name = models.CharField(verbose_name="姓名", max_length=16)
    name = models.CharField(verbose_name="姓名", max_length=16, default="哈哈哈")# 经常查询,速度快(MySQL,https://www.bilibili.com/video/BV15R4y1b7y9)
    name = models.CharField(verbose_name="姓名", max_length=16, default="哈哈哈", null=True, blank=True, db_index=True)
    email = models.CharField(verbose_name="姓名", max_length=16, default="哈哈哈", null=True, blank=True, unique=True)# 在数据库存储时只能是:sh、bj (上海、北京一般用于页面显示中文)
    code = models.CharField(verbose_name="姓名", max_length=16, choices=(("sh", "上海"), ("bj", "北京")),default="sh")
    
    # 不用 max_length=16
    count = models.IntegerField(verbose_name="数量", default=1, null=True, blank=True, unique=True)
    code = models.IntegerField(verbose_name="性别",choices=((1, "男"), (2, "女")),default=1)
    
    register_date = models.DateField(verbose_name="注册时间", auto_now=True)
    
    amount = models.DecimalField(verbose_name="余额", max_digits=10, decimal_places=2)
    

示例:

from django.db import modelsclass UserInfo(models.Model):name = models.CharField(verbose_name="姓名", max_length=16, db_index=True)age = models.PositiveIntegerField(verbose_name="年龄")email = models.CharField(verbose_name="邮箱", max_length=128, unique=True)amount = models.DecimalField(verbose_name="余额", max_digits=10, decimal_places=2, default=0)register_date = models.DateField(verbose_name="注册时间", auto_now=True)class Goods(models.Model):title = models.CharField(verbose_name="标题", max_length=32)# detail = models.CharField(verbose_name="详细信息", max_length=255)detail = models.TextField(verbose_name="详细信息")price = models.PositiveIntegerField(verbose_name="价格")count = models.PositiveBigIntegerField(verbose_name="库存", default=0)

3.1.2 表关系

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Nn8JHd5i-1691468023313)(assets/image-20220703173556969.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YYzEpYcs-1691468023313)(assets/image-20220703174433414.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RrKUispR-1691468023313)(assets/image-20220703175051329.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-L09vUmEU-1691468023314)(assets/image-20220703175312854.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-v5SZBXPB-1691468023314)(assets/image-20220703175556444.png)]

注意:ManyToManyField生成的表字段只能id/bid/gid

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/27588.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【IDEA + Spark 3.4.1 + sbt 1.9.3 + Spark MLlib 构建鸢尾花决策树分类预测模型】

决策树进行鸢尾花分类的案例 背景说明: 通过IDEA Spark 3.4.1 sbt 1.9.3 Spark MLlib 构建鸢尾花决策树分类预测模型,这是一个分类模型案例,通过该案例,可以快速了解Spark MLlib分类预测模型的使用方法。 依赖 ThisBuild /…

会这个Python的测试员,工作都不会太差!

Python语言得天独厚的优势使之在业界的火热程度有增无减,尤其是在经历了互联网,物联网,云计算,大数据,人工智能等浪潮的推动下,其关注度,普适度一路走高。 对于测试人员来说,很多人…

科技感响应式管理系统后台登录页ui设计html模板

做了一个科技感的后台管理系统登录页设计,并且尝试用响应式布局把前端html写了出来,发现并没有现象中的那么容易,chrome等标准浏览器都显示的挺好,但IE11下面却出现了很多错位,兼容起来还是挺费劲的,真心不…

Linux系统中redis基础

本节主要学习redis的概述,安装目录结构,命令解析和redis登录更改,数据库的操作,和redis的持久化。 目录 一、概述 二、安装 1.编译安装 2.rpm安装 三、目录结构 四、命令解析 五、redis登陆更改 问题 解决办法 六、数据…

P11-Transformer学习1.1-《Attention Is All You Need》

Transformer目录:《Transformer Paper》1.0 CV Transformer必读论文5篇_汉卿HanQ的博客-CSDN博客 前文参考:Transformer1.0-预热_汉卿HanQ的博客-CSDN博客 全文1w3字左右,按照论文翻译个人理解精读,如果对你有所帮助,欢迎点个赞哦&#xff…

MQTT消息传输过程,网络断开后,断线重连及订阅消息恢复

1,首先要在网络失败的地方进行client重连 2,一定要设置发送超时,默认是-1,是不断进行发送的,会被长阻塞在这里,单位是ms 3,参考链接 https://vimsky.com/examples/detail/java-method-org.ec…

揭秘无人机在水利行业中如何应用

无人机的应用已经成为现代科技的重要组成部分,在水利行业中,无人机的应用同样发挥了极其重要的作用。无人机在水利行业中的应用,不仅提高了工作效率,还极大地降低了人力和物力成本,为水利工作注入了新的活力。 一、无人…

2023集成电路产业发展与产教融合高峰论坛会议顺利举行

8月5日,由中国半导体行业协会和市政府共同主办,天水师范学院、天水华天科技股份有限公司、杭州加速科技有限公司承办的2023集成电路产业发展与产教融合高峰论坛在天水举行。天水市委书记冯文戈,教育部学生服务与素质发展中心副主任方伟&#…

Flutter父宽度自适应子控件的宽度

需求: 控件随着金币进行自适应宽度 image.png 步骤: 1、Container不设置宽度,需要设置约束padding; 2、文本使用Flexible形式; Container(height: 24.dp,padding: EdgeInsetsDirectional.only(start: 8.dp, end: 5.d…

【知识图谱】图数据库Neo4jDesktop的安装图文详解(小白适用)

neo4j 的安装需要有jdk环境的支持。因此在安装Neo4j之前,需要安装Java JDK。 一.安装JDK 参考文章https://blog.csdn.net/weixin_41824534/article/details/104147067?spm1001.2014.3001.5502 二.Neo4j下载 进入Neo4j官网 选择下载中心 下滑选择Neo4j Deskto…

【学习笔记】生成式AI(ChatGPT原理,大型语言模型)

ChatGPT原理剖析 语言模型 文字接龙 ChatGPT在测试阶段是不联网的。 ChatGPT背后的关键技术:预训练(Pre-train) 又叫自监督式学习(Self-supervised Learning),得到的模型叫做基石模型(Founda…

Go重写Redis中间件 - Go实现Redis集群

Go实现Redis集群 这章的内容是将我们之前实现的单机版的Redis扩充成集群版,给Redis增加集群功能,在增加集群功能之前,我们先学习一下在分布式系统中引用非常广泛的技术一致性哈希,一致性哈希在我们项目里就应用在我们Redis集群的搭建这块 详解一致性哈希 Redis集群需求背…

实际工作中通过python+go-cqhttp+selenium实现自动检测维护升级并发送QQ通知消息(程序内测)

说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家! 首先,今年比较忙没有多余时间去实操创作分享文章给大家,那就给大家分享下博主在实际工作中的一点点内容吧,就当交…

容器安全的常见风险与防护实践

运行在云平台上的容器产品,因为具备一个完整的可移植应用程序环境,能够帮助用户轻松地完成对应用程序的开关控制,提升应用程序的敏捷性,同时节约企业的IT建设成本。在巨大优势作用下,容器产品的采用率在2021年达到了新…

小研究 - Mysql快速全同步复制技术的设计和应用(三)

Mysql半同步复制技术在高性能的数据管理中被广泛采用,但它在可靠性方面却存在不足.本文对半同步复制技术进行优化,提出了一种快速全同步复制技术,通过对半同步数据复制过程中的事务流程设置、线程资源合理应用、批量日志应用等技术手段&#…

全栈测试平台推荐:RunnerGo

做软件测试的同学在工作时应该都碰到过这种情况:接口管理、接口测试用postman、Apipost等接口管理工具,性能测试用jmeter、loadrunner等性能测试工具,接口自动化则是jmeter脚本或者python脚本配合jenkins使用。这种情况极大的降低了研发效率&…

Linux下的环境变量

目录 一、环境变量是什么?二、常见的环境变量三、查看环境变量的方法四、和环境变量相关的命令五、命令行参数五、环境变量通常是具有全局属性的 一、环境变量是什么? 环境变量通俗来说就是一种存储系统和应用程序运行需要的配置信息的方式。可以把环境…

MySQL数据库基础

目标: 1.数据库操作:创建数据库,删除数据库 2.常用数据类型 3.表的操作:创建表,删除表 数据库操作 (1)显示数据库 show databases; (2)创建数据库 创建一个…

Playwright 和 Selenium 的区别是什么?

前言 最近有不少同学问到 Playwright 和 Selenium 的区别是什么? 有同学可能之前学过 selenium 了,再学一个 playwright 感觉有些多余,可能之前有项目已经是 selenium 写的了,换成 playwright 需要时间成本,并且可能有…

算法的时间复杂度和空间复杂度

目录 前言: ✨什么是数据结构? ✨ 什么是算法? ✨数据结构和算法的重要性 🍑算法的时间复杂度和空间复杂度 算法效率 🎉时间复杂度 2.1 时间复杂度的概念 2.2 大O的渐进表示法 🎉空间复杂度 前言&#xf…