当前位置: 首页 > news >正文

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

相关文章:

  • Manga Image Translator 开源 AI 漫画翻译工具的深度剖析
  • 【编写UI自动化测试集】Appium+Python+Unittest+HTMLRunner​
  • ubuntu服务器 如何配置安全加固措施
  • Visual Studio 使用 “Ctrl + /”键设置注释和取消注释
  • 肝了半年,我整理出了这篇云计算学习路线(新手必备,从入门到精通)
  • 安卓手游内存call综合工具/内部call/安卓注入call/数据分析(类人猿学院)
  • C语言-章节 4:函数的定义与声明 ——「神秘法术的卷轴」
  • stm32mp集成swupdateOTA升级
  • docker nginx 配置文件详解
  • vuedraggable固定某一item的记录
  • CentOS安装Docker,Ubuntu安装Docker,Docker解决方案
  • 001 SpringCloudAlibaba整合 - Nacos注册配置中心、Sentinel流控、Zipkin链路追踪、Admin监控
  • LeapMotion第2代 Unity示范代码(桌面开发)
  • 快速幂(算法)的原理
  • SQLMesh系列教程-2:SQLMesh入门项目实战(下篇)
  • 【银河麒麟高级服务器操作系统】服务器卡死后恢复系统日志丢失-分析及处理全过程
  • gitee 配置密钥key过程
  • 通过内网穿透ssh实现远程对家里的linux进行终端操作和编程
  • 20250213编译飞凌的OK3588-C_Linux5.10.209+Qt5.15.10_用户资料_R1
  • Java 同步锁性能的最佳实践:从理论到实践的完整指南
  • 金沙记忆|元谋龙街渡:是起点也是终点
  • 五一档7.47亿收官:《水饺皇后》领跑;男观众占比增多
  • 儿童文学作家周晴病逝,享年57岁
  • 莫斯科一机场实施临时限制措施
  • 新加坡国会选举投票抽样结果公布,执政党已获超半数议席
  • 河南博物院:警惕非官方网络平台 “买讲解保进馆” 等虚假信息