Django5的新特征

news2025/4/6 17:11:06

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 F

class 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 JsonResponse

async 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 开发需求(如高性能、异步处理、安全性)的持续响应。

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

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

相关文章

JVM类加载和垃圾回收(详细)

文章目录 JVM介绍JDK/JRE/JVM的关系 内存结构堆程序计数器虚拟机栈本地方法栈本地内存 类文件字节码文件结构 类加载类的生命周期加载类加载器双亲委派模型 链接初始化类卸载 垃圾回收堆空间的基本结构内存分配和回收原则死亡对象判断方法垃圾收集算法垃圾收集器 JVM 介绍 JD…

基于Flask的影视剧热度数据可视化分析系统的设计与实现

【FLask】基于Flask的影视剧热度数据可视化分析系统的设计与实现&#xff08;完整系统源码开发笔记详细部署教程&#xff09;✅ 目录 一、项目简介二、项目界面展示三、项目视频展示 一、项目简介 随着互联网技术的飞速发展&#xff0c;影视剧行业的数据量呈爆炸性增长&#x…

Docker Desktop如何恢复出厂设置

在测试dify、ragfow等几个模型过程中&#xff0c;各种拉镜像建容器&#xff0c;导致错误提示“AssertionError(Can t access Redis. Please check the Redis status.)”&#xff0c;两个模型都无法使用&#xff0c;如何清空重建&#xff1f;请参照下面操作&#xff1a; 1、Win…

Android Studio:键值对存储sharedPreferences

一、了解 SharedPreferences SharedPreferences是Android的一个轻量级存储工具&#xff0c;它采用的存储结构是Key-Value的键值对方式&#xff0c;类似于Java的Properties&#xff0c;二者都是把Key-Value的键值对保存在配置文件中。不同的是&#xff0c;Properties的文件内容形…

国自然专项项目申请:AI赋能的急性心肌梗死预警研究|基金申请·25-02-14

小罗碎碎念 急性心肌梗死严重威胁生命健康&#xff0c;因其起病隐匿、发病机制复杂&#xff0c;早期预警困难。现在&#xff0c;转机来了&#xff01;国自然“AI赋能的急性心肌梗死预警研究”专项项目2025年度指南重磅发布。 该项目致力于攻克难题&#xff0c;通过多学科交叉…

【鸿蒙开发】第二十八章 应用状态的讲解、状态持久化、网络管理、应用数据持久化、文件上传下载

目录 1 应用状态 1.1 LocalStorage&#xff1a;页面级UI状态存储 1.1.1 两个页面共享一个对象 1.1.2 页面间共享 1.1.3 应用逻辑中使用 1.2 AppStorage&#xff1a;应用全局的UI状态存储 1.2.1 概述 1.2.2 基本用法 1.2.3 经常使用的方法 1.3 PersistentStorage&#x…

学习threejs,使用HemisphereLight半球光

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;threejs gis工程师 文章目录 一、&#x1f340;前言1.1 ☘️THREE.HemisphereLight 二、…

数仓:核心概念,数仓系统(ETL,数仓分层,数仓建模),数仓建模方法(星型模型,雪花模型,星座模型)和步骤

数仓建模的核心概念 事实表&#xff08;Fact Table&#xff09;&#xff1a; 存储业务过程的度量值&#xff08;如销售额、订单数量等&#xff09;。 通常包含外键&#xff0c;用于关联维度表。 维度表&#xff08;Dimension Table&#xff09;&#xff1a; 存储描述性信息&…

python 基础知识100问

目录 1 Python中函数的输入参数类型‌&#xff1a; 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 设…

如何使用 DeepSeek R1 构建开源 ChatGPT Operator 替代方案

开源大型语言模型&#xff08;LLMs&#xff09;的兴起使得创建 AI 驱动的工具比以往任何时候都更容易&#xff0c;这些工具可以与 OpenAI 的 ChatGPT Operator 等专有解决方案相媲美。在这些开源模型中&#xff0c;DeepSeek R1 以其强大的推理能力、自由的可访问性和适应性而脱…

【教程】MySQL数据库学习笔记(七)——多表操作(持续更新)

写在前面&#xff1a; 如果文章对你有帮助&#xff0c;记得点赞关注加收藏一波&#xff0c;利于以后需要的时候复习&#xff0c;多谢支持&#xff01; 【MySQL数据库学习】系列文章 第一章 《认识与环境搭建》 第二章 《数据类型》 第三章 《数据定义语言DDL》 第四章 《数据操…

Word 公式转 CSDN 插件 发布

经过几个月的苦修&#xff0c;这款插件终于面世了。 从Word复制公式到CSDN粘贴&#xff0c;总是出现公式中的文字被单独提出来&#xff0c;而公式作为一个图片被粘贴的情况。公式多了的时候还会导致CSDN禁止进一步的上传公式。 经过对CSDN公式的研究&#xff0c;发现在粘贴公…

【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"译成密码&#xff0c;译码规律是&#xff1a;用原来字母后面的第4个字母代替原来的字母&#xff0e; 例如&#xff0c;字母"A"后面第4个字母是"E"&#xff0e;"E"代替"A"。因此&#xff0c;"China"应译…

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桌面版&#xff1b;Windows10。 2 安装配置XRDP sudo yum install epel-release sudo yum install xrdp sudo yum install tige…

中国AI“拥抱开源”给世界的启示——Anko

事实证明&#xff0c;中国AI企业“拥抱开源”&#xff0c;不仅为自身发展开拓了新路径&#xff0c;也带动AI企业跨国合作的需求&#xff0c;并推动全球AI生态向“开源普惠”转型。Anko通过免费开放部分模型功能&#xff0c;将AI时代的数字红利公平地派发到每一位网民手中&#…

DeepSeek处理自有业务的案例:让AI给你写一份小众编辑器(EverEdit)的语法着色文件

1 DeepSeek处理自有业务的案例&#xff1a;让AI给你写一份小众编辑器(EverEdit)的语法着色文件 1.1 背景 AI能力再强&#xff0c;如果不能在企业的自有业务上产生助益&#xff0c;那基本也是一无是处。将企业的自有业务上传到线上训练&#xff0c;那是脑子进水的做法&#xff…

Jenkins 配置 Git Parameter 四

Jenkins 配置 Git Parameter 四 一、开启 项目参数设置 勾选 This project is parameterised 二、添加 Git Parameter 如果此处不显示 Git Parameter 说明 Jenkins 还没有安装 Git Parameter plugin 插件&#xff0c;请先安装插件 Jenkins 安装插件 三、设置基本参数 点击…

网络工程师 (38)流量和差错控制

一、流量控制 流量控制是一种协调发送站和接收站工作步调的技术。它的主要目的是防止发送端发送数据过快&#xff0c;导致接收端缓冲区溢出&#xff0c;从而造成数据丢失。流量控制机制通过调整发送速率来匹配接收端的处理能力。 基本原理 发送站每发出一帧数据&#xff0c;就进…