Django5的新特征

Django是一个用Python编写的高级Web框架,它的目标是让开发人员能够快速高效地构建复杂的Web应用程序。自从2008年首次发布以来,Django已经成为开源Web框架中的佼佼者,被广泛应用于各种规模的项目中。Django 提供了一套强大且全面的工具,使得 Web 开发变得更加高效、安全和可维护。它遵循模型-视图-模板(MVT)的设计模式,无论是小型项目还是大型企业级应用,Django 都能够提供强有力的支持。
Django 5.0 带来了许多新特性和改进,使得开发者能够更高效地构建现代化的 Web 应用。从异步支持到安全性增强,再到性能优化和新的工具,Django 5.0 为开发者提供了更多的可能性和灵活性。如果你正在使用 Django,升级到 5.0 版本将为你带来更好的开发体验和更强大的功能。
Django 5 是 Django 框架的一个重要版本,引入了多项新特性、性能优化和 API 改进。以下是 Django 5 相比之前版本(如 Django 4.x)的详细改进分析:
1. Python 版本支持升级
最低支持 Python 3.10:Django 5 放弃了对 Python 3.8 和 3.9 的支持,仅支持 Python 3.10 及以上版本。这使得 Django 5 可以充分利用 Python 3.10 的新特性(如模式匹配、类型注解增强等)。
影响:开发者需升级 Python 环境,旧项目迁移时需注意兼容性。
2. 数据库生成字段(GeneratedField)
新特性:引入了GeneratedField,允许直接在数据库中定义基于其他字段的计算字段(类似数据库中的生成列)。
适用场景:例如,根据 price 和 tax_rate 自动计算 total_price。
代码示例:
from django.db import models
from django.db.models import Fclass Product(models.Model):price = models.DecimalField(max_digits=10, decimal_places=2)tax_rate = models.DecimalField(max_digits=5, decimal_places=2)total_price = models.GeneratedField(expression=F("price") * (1 + F("tax_rate")),output_field=models.DecimalField(max_digits=10, decimal_places=2),db_persist=True, # 表示字段值持久化到数据库)
优势:减少应用层计算开销,提升查询效率。
3. 表单字段渲染优化
表单组(Form Group)的简化渲染:Django 5 新增 div 和 field_group 模板标签,简化表单字段组的渲染。
旧版本:需手动编写 HTML 结构。
新版本:通过模板标签自动生成结构化代码。
代码示例:
{% for field in form %}{% div field.group %} <!-- 自动包裹字段、标签和错误信息 -->{{ field.label_tag }} {{ field }} {{ field.errors }}{% enddiv %}{% endfor %}
字段帮助文本支持 HTML:允许在表单字段的 help_text 中直接使用 HTML,增强文档灵活性。
4. 异步处理增强
异步视图与中间件:Django 5 进一步扩展了对异步(Async)的支持,包括:
异步视图(Async Views):支持 async def 定义的视图函数。
异步中间件(Async Middleware):允许中间件处理异步请求。
异步测试客户端:支持测试异步视图。
代码示例:
from django.http import JsonResponseasync def async_view(request):await asyncio.sleep(1)return JsonResponse({"message": "Hello from async!"})
异步 ORM 接口(实验性):
提供了初步的异步 ORM 方法(如 acreate(), aget()),但尚未覆盖所有查询操作。
5. 模板引擎改进
惰性模板渲染:模板渲染支持惰性求值(Lazy Evaluation),减少不必要的计算开销。
新的模板过滤器:dictsort:按字典键排序。jsondumps:将对象转换为 JSON 字符串(替代手动调用 json.dumps)。
代码示例:
{{ data|dictsort:"name" }} <!-- 按 name 字段排序字典列表 -->{{ data|jsondumps }} <!-- 输出 JSON 字符串 -->
6. 管理后台(Admin)增强
自定义字段标签:允许在 Admin 中直接为字段添加自定义标签(通过 label_tag 属性)。
灵活的列表过滤器:支持在 list_filter 中使用 Q 对象,实现更复杂的过滤逻辑。
Admin 界面主题优化:默认界面支持深色模式,并优化了移动端显示。
7. 日期与时间的本地化支持
本地化格式扩展:新增对 DATE_FORMAT、DATETIME_FORMAT 等设置的细粒度控制,支持更灵活的本地化显示。
时区处理改进:timezone 模块增强对非固定时区的支持(如历史时区变化)。
8. 测试与调试工具改进
新的断言方法:
assertQuerySetEqual():更精确地比较查询集结果。
assertFormError():支持检查表单特定字段的错误。
调试页面优化:错误页面(如 500 错误)的堆栈跟踪信息更清晰,支持折叠代码块。
9. 安全增强
密码哈希算法更新:默认使用 Argon2 替代 PBKDF2,提升密码存储安全性。
CSRF 保护的严格模式:新增 CSRF_TRUSTED_ORIGINS 配置,限制跨域请求来源。
10. 性能优化
ORM 查询优化:对复杂查询(如子查询、窗口函数)的生成逻辑进行了优化,减少 SQL 语句冗余。
模板渲染加速:通过缓存模板节点解析结果,提升大型模板的渲染速度。
11. 其他改进
runserver 命令增强:支持通过 --nostatic 禁用静态文件服务,方便与外部服务(如 Nginx)集成。
URL 路由语法简化:允许在 path() 中使用 str、int 等类型直接定义参数类型(替代 django.urls.converters)。
12. 弃用功能与兼容性说明
移除对 django.contrib.gis 的部分旧 API:如 GEOSGeometry 的 json 属性改为 geojson。
弃用 force_str() 和 force_text():统一使用 force_str()(兼容 Python 3 字符串语义)。
Django 5 在数据库功能、异步支持、模板引擎、安全性和开发者体验等方面均有显著提升。对于新项目,建议直接使用 Django 5 以利用其最新特性;对于旧项目升级,需重点关注 Python 版本兼容性、弃用 API 的替换和异步代码的适配。其改进方向体现了 Django 框架对现代 Web 开发需求(如高性能、异步处理、安全性)的持续响应。
相关文章:
Django5的新特征
Django是一个用Python编写的高级Web框架,它的目标是让开发人员能够快速高效地构建复杂的Web应用程序。自从2008年首次发布以来,Django已经成为开源Web框架中的佼佼者,被广泛应用于各种规模的项目中。Django 提供了一套强大且全面的工具&#…...
web自动化笔记(二)
文章目录 一、参数化测试1.pytest命令2.实现参数化测试3.填写地址测试4.生成Allure测试报告5.关键字驱动 二、案例1.实现后台登录1.1登录1.2.处理验证码1.3.封装识别验证码函数 2.通过cookie保持登录2.1给页面添加cookie2.2获取页面的cookie2.3自动化获取cookie 三、excel进行数…...
青少年编程与数学 02-009 Django 5 Web 编程 12课题、表单处理
青少年编程与数学 02-009 Django 5 Web 编程 12课题、表单处理 一、表单1. 表单类的定义示例:普通表单示例:模型表单 2. 字段类型3. 验证4. 渲染5. 表单处理示例:视图中的表单处理6. 自定义表单 二、验证1. 字段级验证示例2. 表单级验证示例3…...
JVM类加载和垃圾回收(详细)
文章目录 JVM介绍JDK/JRE/JVM的关系 内存结构堆程序计数器虚拟机栈本地方法栈本地内存 类文件字节码文件结构 类加载类的生命周期加载类加载器双亲委派模型 链接初始化类卸载 垃圾回收堆空间的基本结构内存分配和回收原则死亡对象判断方法垃圾收集算法垃圾收集器 JVM 介绍 JD…...
秘密信息嵌入到RGB通道的方式:分段嵌or完整嵌入各通道
目录 1. 将秘密信息分为三部分的理由 (1)均匀分布负载 (2)提高鲁棒性 (3)容量分配 2. 不将秘密信息分为三部分的情况 (1)嵌入容量 (2)视觉质量 &#…...
基于Flask的影视剧热度数据可视化分析系统的设计与实现
【FLask】基于Flask的影视剧热度数据可视化分析系统的设计与实现(完整系统源码开发笔记详细部署教程)✅ 目录 一、项目简介二、项目界面展示三、项目视频展示 一、项目简介 随着互联网技术的飞速发展,影视剧行业的数据量呈爆炸性增长&#x…...
Docker Desktop如何恢复出厂设置
在测试dify、ragfow等几个模型过程中,各种拉镜像建容器,导致错误提示“AssertionError(Can t access Redis. Please check the Redis status.)”,两个模型都无法使用,如何清空重建?请参照下面操作: 1、Win…...
Go语言协程Goroutine高级用法(一)
什么协程 在Go语言中,协程就是一种轻量的线程,是并发编程的单元,由Go来管理,所以在GO层面的协程会更加的轻量、高效、开销更小,并且更容易实现并发编程。 轻量级线程 Go语言中协程(线程)与传…...
Android Studio:键值对存储sharedPreferences
一、了解 SharedPreferences SharedPreferences是Android的一个轻量级存储工具,它采用的存储结构是Key-Value的键值对方式,类似于Java的Properties,二者都是把Key-Value的键值对保存在配置文件中。不同的是,Properties的文件内容形…...
网络安全-攻击路径
以下是互联网场景下常见的攻击路径分类及详细说明,以分层结构呈现: 一、网络层攻击路径 DDoS攻击 原理:通过僵尸网络发起海量请求淹没目标服务器示例:SYN Flood攻击、HTTP洪泛攻击影响:服务不可用,带宽资源…...
记录阿里云CDN配置
网站接入CDN全流程,共4步!-阿里云开发者社区 1、开通阿里云CDN服务 2、添加加速域名 3、验证域名归属权 4、域名添加CDN生成的CNAME解析 按照官网描述增加。细节点: 1. 域名和泛域名区别 2.开启https,要用nginx的证书,和项…...
国自然专项项目申请:AI赋能的急性心肌梗死预警研究|基金申请·25-02-14
小罗碎碎念 急性心肌梗死严重威胁生命健康,因其起病隐匿、发病机制复杂,早期预警困难。现在,转机来了!国自然“AI赋能的急性心肌梗死预警研究”专项项目2025年度指南重磅发布。 该项目致力于攻克难题,通过多学科交叉…...
【鸿蒙开发】第二十八章 应用状态的讲解、状态持久化、网络管理、应用数据持久化、文件上传下载
目录 1 应用状态 1.1 LocalStorage:页面级UI状态存储 1.1.1 两个页面共享一个对象 1.1.2 页面间共享 1.1.3 应用逻辑中使用 1.2 AppStorage:应用全局的UI状态存储 1.2.1 概述 1.2.2 基本用法 1.2.3 经常使用的方法 1.3 PersistentStorage&#x…...
学习threejs,使用HemisphereLight半球光
👨⚕️ 主页: gis分享者 👨⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨⚕️ 收录于专栏:threejs gis工程师 文章目录 一、🍀前言1.1 ☘️THREE.HemisphereLight 二、…...
天童美语:观察你的生活
在孩子的认知里,世界宛如一片充满神秘色彩的未知之境,有着无尽的奥秘等待他们去探索。家长们,引导孩子用心观察世界,领略其中的美妙,这对孩子的成长进程有着极为关键的作用。贵阳天童教育相信:观察生活&…...
数仓:核心概念,数仓系统(ETL,数仓分层,数仓建模),数仓建模方法(星型模型,雪花模型,星座模型)和步骤
数仓建模的核心概念 事实表(Fact Table): 存储业务过程的度量值(如销售额、订单数量等)。 通常包含外键,用于关联维度表。 维度表(Dimension Table): 存储描述性信息&…...
python 基础知识100问
目录 1 Python中函数的输入参数类型: 2 python 第一个方法参数 selt cls 3 类和面向对象 4 Python 中__init__.py 作用 5 python 元类与装饰器 元类与装饰器https://blog.csdn.net/qq_52213943/article/details/145175689?spm1001.2014.3001.5506 6 设…...
Linux入侵检查流程
1. 初步信息收集 1.1 系统信息 • 目的:了解当前系统的基本情况,包括操作系统版本、内核版本等。 • 命令: # 查看操作系统发行版信息 cat /etc/os-release # 查看内核版本 uname -r 1.2 网络信息 • 目的:查看网络连接状态、…...
pg_sql关于时间的函数
1、时间戳和日期之间的相互转换 时间戳转日期(时间戳为数值类型,若为字符型需进行转换) # 保留到秒:2025-10-02 04:46:40 (字符型转换数值型) select to_timestamp(1759351600::bigint)# 保留到日&#x…...
如何使用 DeepSeek R1 构建开源 ChatGPT Operator 替代方案
开源大型语言模型(LLMs)的兴起使得创建 AI 驱动的工具比以往任何时候都更容易,这些工具可以与 OpenAI 的 ChatGPT Operator 等专有解决方案相媲美。在这些开源模型中,DeepSeek R1 以其强大的推理能力、自由的可访问性和适应性而脱…...
【教程】MySQL数据库学习笔记(七)——多表操作(持续更新)
写在前面: 如果文章对你有帮助,记得点赞关注加收藏一波,利于以后需要的时候复习,多谢支持! 【MySQL数据库学习】系列文章 第一章 《认识与环境搭建》 第二章 《数据类型》 第三章 《数据定义语言DDL》 第四章 《数据操…...
Word 公式转 CSDN 插件 发布
经过几个月的苦修,这款插件终于面世了。 从Word复制公式到CSDN粘贴,总是出现公式中的文字被单独提出来,而公式作为一个图片被粘贴的情况。公式多了的时候还会导致CSDN禁止进一步的上传公式。 经过对CSDN公式的研究,发现在粘贴公…...
【设计模式】 建造者模式和原型模式
建造者模式(Builder Pattern) 概述 建造者模式是一种创建型设计模式,它允许逐步构建复杂对象。通过将构造过程与表示分离,使得同样的构建过程可以创建不同的表示。这种模式非常适合用于创建那些具有很多属性的对象,尤…...
win7误删注册表文件夹导致exe无法执行
今天在装某个软件的时候报错 “不是有效的Win32应用程序”,找一篇文章于是按文章删除了注册表上的好多文件,之后就发现所有的exe文件都打不开了,更糟糕的是中间还弹出来一个“是否将IE设置为所有程度的默认执行程序”,没思考就点击…...
【ESP32接入国产大模型之Deepseek】
【ESP32接入国产大模型之Deepseek】 1. Deepseek大模型1.1 了解Deepseek api1.2 Http接口鉴权1.3. 接口参数说明1.3.1 请求体(request)参数1.3.2 模型推理 2. 先决条件2.1 环境配置2.2 所需零件 3. 核心代码3.1 源码分享3.2 源码解析3.3 连续对话修改后的代码代码说明示例输出注…...
C语言蓝桥杯1003: [编程入门]密码破译
要将"China"译成密码,译码规律是:用原来字母后面的第4个字母代替原来的字母. 例如,字母"A"后面第4个字母是"E"."E"代替"A"。因此,"China"应译…...
New Game--(单调队列)
I - New Game 有一种新的游戏,Monocarp 想要玩。这个游戏使用一副包含 n 张牌的牌堆,其中第 i 张牌上写有一个整数 a_i。 在游戏开始时,Monocarp 可以在第一轮选择牌堆中的任意一张牌。在接下来的每一轮中,Monocarp 可以选择一张…...
什么是偏光环形光源
偏光环形光源是一种特殊的光源,常用于机器视觉、光学检测和工业自动化等领域。它结合了环形光源和偏光技术,能够有效减少反射、增强对比度,特别适用于检测高反光或表面复杂的物体。 主要特点: 环形设计:光线均匀照射物…...
SolidWorks速成教程P3-3【零件 | 第三节】——草图绘制面实线与构造线的区别
经过了前面的特征学习后,是不是感觉对 SolidWorks越来越熟悉了?不过发现, SolidWorks速成这套教程,对于一些基础问题,还是需要解释得更详细一些,所以在这节再补充一下草图绘制面&实线与构造线的区别。 目录 1.草图绘制面 2.实线与构造线的区别 1.草图绘制面 之前…...
win10中mstsc远程Centos-Stream 9图形化界面
文章目录 1 前置状态2 安装配置XRDP3 关闭SELinux3.1 查看selinux状态3.2 关闭selinux 4 启动XRDP5 Win10远程连接测试 1 前置状态 已安装CentOS9桌面版;Windows10。 2 安装配置XRDP sudo yum install epel-release sudo yum install xrdp sudo yum install tige…...
