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.hqwc.cn/news/57384.html

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

相关文章

【Java split】split() 函数分割空字符串后数组长度为1的原因以及规避措施(105)

问题现象: import java.util.ArrayList; import java.util.Arrays; import java.util.List;public class test06 {public static void main(String[] args) {// Java split()函数 分割空字符串长度为1的解释;String s2 "";String[] arr2 s2.split(&quo…

git 版本管理工具 学习笔记

git 学习笔记 目录 一、git是什么 二、创建仓库 三、工作区域和文件状态 四、添加和提交文件 五、回退版本 (了解) 六、查看差异 七、删除文件 八、.gitignore文件(了解) 九、github ssh-key配置 十、本地仓库和远程仓库内…

【RabbitMQ】golang客户端教程3——发布订阅(使用fanout交换器)

发布订阅 在上一个教程中,我们创建了一个工作队列。工作队列背后的假设是每个任务只传递给一个工人。在这一部分中,我们将做一些完全不同的事情——我们将向多个消费者传递一个消息。这就是所谓的“订阅/发布模式”。 为了说明这种模式,我们…

【Hystrix技术指南】(4)故障切换的运作流程

[每日一句] 也许你度过了很糟糕的一天,但这并不代表你会因此度过糟糕的一生。 [背景介绍] 分布式系统的规模和复杂度不断增加,随着而来的是对分布式系统可用性的要求越来越高。在各种高可用设计模式中,【熔断、隔离、降级、限流】是经常被使…

嵌入式传感器的接口:轮询的ADC驱动器

嵌入式开发工程师如何在现代嵌入式应用程序中创建一个接口,该接口将低级驱动程序实现细节与应用程序代码分离。该接口提供了一种体系结构抽象,它通过减少对硬件的依赖来提高应用程序代码的可伸缩性和可移植性。 现在,我们将基于在3种微控制器…

更新页面无法回显

需求与问题: 在菜品管理开发中,我需要修改菜品,第一步是回显页面,但在我再三确认代码无误的情况下依旧无法回显内容 问题发现与解决: 经过排查,我发现我的DishDTO内容如下: Data public clas…

基于Dlib库+SVM+Tensorflow+PyQT5智能面相分析-机器学习算法应用(含全部工程源码)+训练及测试数据集

目录 前言总体设计系统整体结构图系统流程图模型流程 运行环境Python 环境TensorFlow环境界面编程环境 模块实现1. 数据预处理2. 模型构建1)定义模型结构2)交叉验证模型优化 3. 模型训练及保存4. 模型测试1)摄像头调用2)模型导入及…

CentOS虚拟机 NAT模式连网

1、查看本地VMnet8的网络信息 cmd ipconfig2、编辑VMware虚拟网络编辑器 (1)打开网络编辑器 (2)打开NET设置 (3)修改网络配置 修改子网ip和windows查到的ip的最后一位不一样就行和子网掩码照抄 3、在VMw…

一生一芯1——windows与Ubuntu双系统安装

UltraISO下载 下载链接:https://pan.baidu.com/s/18ukDs6yL64qU6thYyZEo-Q?pwdo8he 提取码:o8he 一路傻瓜安装,安装后点击继续试用 Ubuntu系统下载 这里我使用的是官网的22.04版本,由于大于4G,无法上传至百度网盘…

windows .gitignore 加入文件名后 依然可以从git status中看到文件问题

最近在学git,对着b站的视频操作,结果很简单的添加.gitignore文件操作,up主的正常隐藏,我的却一直出问题。 百思不得其解,网上各种啥啥啥清缓存都没讲到点上。 最后发现是.gitignore文件有问题,windows默认…

Detector定位算法在FPGA中的实现——section1 原理推导

关于算法在FPGA中的实现,本次利用业余的时间推出一个系列章节,专门记录从算法的推导、Matlab的实现、FPGA的移植开发与仿真做一次完整的FPGA算法开发,在此做一下相关的记录和总结,做到温故知新。 这里以Detector在Global Coordina…

Llama 2:开放基础和微调聊天模型

介绍 大型语言模型(llm)作为高能力的人工智能助手,在复杂的推理任务中表现出色,这些任务需要广泛领域的专家知识,包括编程和创意写作等专业领域。它们可以通过直观的聊天界面与人类进行交互,这在公众中得到了迅速而广泛的采用。 法学硕士的能力是显著的考虑到训练的表面上…