Django进阶

news2024/12/22 22:04:29

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....):
            pass
        
        def __call__(self,....):
            pass
            
    django内部默认执行call方法,传入参数。
    
  • 反射

    class MyMd(object):
        def __init__(self....):
            pass
        
        def __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_response
            
        def __call__(self, request):
            response = None
            if 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 response
        
        
    class 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 models
    
    
    class 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 常见字段和参数

  • 字段

    CharField
    
    SmallIntegerField
    IntegerField
    BigIntegerField
    
    DateField
    DateTimeField
    
    BooleanField  -> 其实数据库不支持真假,根据SmallIntegerField创造出来出来。 0  1
    
    DecimalField  -> 精确的小数
    
  • 参数

    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 models


class 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.coloradmin.cn/o/847327.html

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

相关文章

开窗积累之学习更新版

1. 开窗使用1之 count range between current row and current row 将相同排序字段的值进行函数计算 selectsku_id,substr(create_date,1,7) date_month,order_id,create_date,sku_num*price,sum(sku_num*price) over (partition by sku_id order by substr(create_date,1,7)…

M2I触摸屏与PLC通信手册下部

其它推荐设置见内部同步、端子块、清除发送CTS置于0V位置。 固定设置在偶校验,数据比特7位,停止比特位在第2比特位上。 (3) C500-LK203 拨动开关设置 开关 设置项目 开关设置状态ON OFFSW1 1~5 制定站号 0 1 2 … 30 31 1 站号设置 OFF ON OFF … OFF…

stable-diffusion-webui 界面汉化

本教程通过安装 sd-webui-bilingual-localization 插件来达到汉化目的, 项目地址为:https://github.com/journey-ad/sd-webui-bilingual-localization 一、安装插件 先进入插件安装界面 在搜索栏搜索 zh_CN Localization 中文语言包, 项目地址: https://github.com/dtlnor/st…

vue+iviewUi+oss直传阿里云上传文件

前端实现文件上传到oss(阿里云)适用于vue、react、uni-app,获取视频第一帧图片 用户获取oss配置信息将文件上传到阿里云,保证了安全性和减轻服务器负担。一般文件资源很多直接上传到服务器会加重服务器负担此时可以选择上传到oss&…

怎么修改ip地址 手机ip地址如何改

如今的数字化时代,IP地址是连接我们与互联网世界的桥梁。然而,有时我们可能需要修改IP地址以满足特定需求,比如提高网络速度、绕过地理限制等。本文将为您提供修改IP地址的简单步骤和常见问题解答,帮助您轻松完成IP地址修改。 一、…

SciencePub学术 | Elsevier旗下计算机类重点SCIE征稿中

SciencePub学术 刊源推荐: Elsevier旗下计算机类重点SCIE征稿中!信息如下,录满为止: 一、期刊概况: 计算机语音类重点SCIE 【期刊简介】IF:4.0-4.5,JCR2区,中科院3区; 【出版社…

NANK南卡签约傅园慧,倡导更健康的听音体验

近日,中国知名骨传导耳机品牌——NANK南卡,正式官宣著名游泳冠军傅园慧成为Nank南卡的品牌推荐大使。 傅园慧是一位备受瞩目的运动员,在游泳领域取得了令人瞩目的成就,不仅如此她独特的个性和乐观向上的态度而闻名,深受…

2023全新UI好看的社区源码下载/反编译版

2023全新UI好看的社区源码下载/反编译版 这次分享一个RuleAPP二开美化版(尊重每个作者版权),无加密可反编译版本放压缩包了,自己弄吧!!! RuleAPP本身就是一款免费开源强大的社区,基…

一文5000字从0到1构建高效的接口自动化测试框架思路

在选择接口测试自动化框架时,需要根据团队的技术栈和项目需求来综合考虑。对于测试团队来说,使用Python相关的测试框架更为便捷。无论选择哪种框架,重要的是确保 框架功能完备,易于维护和扩展,提高测试效率和准确性。…

现代C++中的从头开始深度学习【1/8】:基础知识

一、说明 提及机器学习框架与研究和工业的相关性。现在很少有项目不使用Google TensorFlow或Meta PyTorch,在于它们的可扩展性和灵活性。也就是说,花时间从头开始编码机器学习算法似乎违反直觉,即没有任何基本框架。然而,事实并非…

同芯同意创未来——赛意力量 SNP ·南京半导体高科专场

7月28日,“赛意力量全国行”将在南京组织以“同芯同意创未来”为主题的南京半导体高科专场沙龙活动。届时,“赛意力量”将携众优秀企业IT及财务领域嘉宾,开展深度交流,共同为推动科技创新与区域经济发展而出谋划策。 南京作为中国…

并发——线程与进程的关系,区别及优缺点?

文章目录 1. 图解进程和线程的关系2.程序计数器为什么是私有的?3. 虚拟机栈和本地方法栈为什么是私有的?4. 一句话简单了解堆和方法区5. 说说并发与并行的区别? 从 JVM 角度说进程和线程之间的关系 1. 图解进程和线程的关系 下图是 Java 内存区域,通过下图我们…

【echarts】手把手喂饭教学!最容易懂的微信小程序 echarts 项目实践入门教程

前言:echarts是一个使用 canvas 制作图表的组件库,是前端中最常见的数据可视化( DashBoard ) 工具之一。相信很多同学都已经接触过了,但一直局限于使用官网的模板,无法完成个性化的精美图表。如果你也正被 无法使用echarts完成个性…

word单独一页设置页面设置

点击“分隔符——下一页”,这一页就成为了独立的一节,就可以单独设置页面布局了

掌握Python列表的魔法:解密常用方法揭示的编程奥秘!

在Python的编程世界中,列表是你的魔法仓库,能够存储、组织和操控各种数据。这些数据可以是数字、字符串、对象,甚至是其他列表。无论你是新手还是经验丰富的开发者,本篇博客将带你深入探索Python列表的常用方法,揭示这…

python简单知识点大全

python简单知识点大全 一、变量二、字符串三、比较运算符四、随机数4.1、随机整数4.2、随机浮点数4.3、随机数重现 五、数字类型5.1、整数5.2、浮点数5.3、复数 六、数字运算七、内置函数八、布尔类型八、逻辑运算符九、短路逻辑和运算符优先级十、分支和循环10.1、if语句10.2、…

Java技术整理(3)—— 多线程并发篇

1、Java 线程实现/创建方式 (1)继承Thread类 Thread类本质上是实现了Runnable接口的实例,代表一个线程的实例,通过start()启动,自动执行run()方法。 (2)实现Runnable接口 Runnable是一个没有…

【我们一起60天准备考研算法面试(大全)-第三十七天 37/60】【思维题】

专注 效率 记忆 预习 笔记 复习 做题 欢迎观看我的博客,如有问题交流,欢迎评论区留言,一定尽快回复!(大家可以去看我的专栏,是所有文章的目录)   文章字体风格: 红色文字表示&#…

论文阅读---《Unsupervised Transformer-Based Anomaly Detection in ECG Signals》

题目:基于Transformer的无监督心电图(ECG)信号异常检测 摘要 异常检测是数据处理中的一个基本问题,它涉及到医疗感知数据中的不同问题。技术的进步使得收集大规模和高度变异的时间序列数据变得更加容易,然而&#xff…

实时通信应用的开发:Vue.js、Spring Boot 和 WebSocket 整合实践

目录 1. 什么是webSocket 2. webSocket可以用来做什么? 3. webSocket协议 4. 服务器端 5. 客户端 6. 测试通讯 1. 什么是webSocket WebSocket是一种在单个TCP连接上进行全双工通信的协议。WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务…