Django 5.0 来了!

python3.4+django1.9+mysql5.6环境之hello world 一、创建项目 下载django的包,到刚解压后的目录下执行命令 python setup.py install 先转到包所在目录,然后运行django-admin.py startproject myweb 或者(django-admin startproject myweb “我的是这个”) 即可建立名字为myweb 的项目 阅读详情

你好,我是 EarlGrey,一名双语学习者,会一点编程,目前已翻译出版《Python 无师自通》、《Python 并行编程手册》等书籍。

点击上方蓝字关注我,获取最新编程及AI干货、高赞工具和项目分享。

在后台回复“books”,即可领取超值优质电子书合集。

今天早些时候,Django团队正式发布了 Django 5.0 版本,

现在通过 pip 进行安装,就已经是 5.0 了:

pip install django

据团队成员Mariusz Felisiak介绍,Django 5.0的首个版本共合并了接近700个commit,有204位开发者参与版本开发。

新版本带来了很多令人兴奋的新特性,让我们一起来了解一下吧。

数据库生成字段 Generated Fields

多年来,Django 开发人员一直在纠结以下问题:

  • 在哪里保存基于模型对象的可复用属性?

  • 如何在所有 Django 组件中使用它们?

Django 5.0 带来了这些需求的答案-- GeneratedField!

它允许创建数据库生成的字段,其值总是由数据库本身根据其他字段计算得出。数据库表达式和函数也可用于即时进行必要的修改。让我们来看看它在实际中是如何工作的。

假设我们有一些经常连在拼接使用的字段,如 first_name 和 last_name。在 5.0 以下版本中,最佳的选择是自定义实现模型的 QuerySet 或 Manager 管理器。

from django.db import models
from django.db.models.functions import Concat


class Order(models.Model):
    person = models.ForeignKey("Person", models.CASCADE)
    ...


class PersonQuerySet(models.QuerySet):
    def with_extra_fields(self):
        return self.annotate(
            full_name=Concat(
                "first_name", models.Value(" "), "last_name",
            ),
        )


class Person(models.Model):
    first_name = models.CharField(max_length=255)
    last_name = models.CharField(max_length=255)

    objects = PersonQuerySet.as_manager()

    def __str__(self):
        return f"{self.first_name} {self.last_name}"

在自定义的 QuerySet 里添加注释,可以实现共享模型对象的常用计算值:

python3 manage.py shell
>>> from order.models import Order, Person
>>> Person.objects.with_extra_fields().filter(full_name="Joe Doe")
<PersonQuerySet [<Person: Joe Doe>]>
>>> mark = Person.objects.with_extra_fields().get(full_name="Mark Doe")
>>> mark.full_name
'Mark Doe'
# It's not available on relationship :(
>>> Order.objects.filter(person__full_name="Catherine Smith")
    ...
    raise FieldError(
django.core.exceptions.FieldError: Unsupported lookup 'full_name'
for ForeignKey or join on the field not permitted.

不过,QuerySet 注释也有局限性。首先,full_name 只适用于从 .with_extra_fields() 方法返回的对象,因此我们必须记住使用它。模型方法中的 self 实例也不能使用它,因为它不是 Person 属性。例如,它不能用于 Person.str()。此外,每次都要计算值,这对于复杂的计算来说可能是个问题。

GeneratedField 使基于其他字段的值的提供变得真正无缝。每次使用给定的数据库表达式更改模型时,它的值都会自动设置。此外,还可以使用 db_persist 参数决定是否存储该值:

  • db_persist=True:表示存储这些值,并像其他普通列一样占用存储空间。另一方面,只有在值发生变化时才会计算这些值,因此我们可以避免在获取数据时进行额外的计算。在某些数据库(MySQL、Postgres、SQLite)中,它们甚至可以被编入索引!

  • db_persist=False: 表示列不占用存储空间,但每次都会计算其值。

数据库对使用不同表达式和选项的支持可能有所不同。例如,Postgres 不支持虚拟列,因此 db_persist 必须设置为 True。SQLite 和 MySQL 同时支持虚拟字段和存储生成字段。

回到我们的 "full_name "示例。在 Django 5.0 中,我们可以摆脱之前方法的所有弊端,用 full_name 注解中使用的表达式定义一个 GeneratedField:

from django.db import models
from django.db.models.functions import Concat


class Order(models.Model):
    person = models.ForeignKey("Person", models.CASCADE)
    ...

class Person(models.Model):
    first_name = models.CharField(max_length=255)
    last_name = models.CharField(max_length=255)
    # ↓ Our new GeneratedField based on an expression ↓
    full_name = models.GeneratedField(
        expression=Concat(
            "first_name", models.Value(" "), "last_name"
        ),
        output_field=models.CharField(max_length=511),
        db_persist=True,
    )

    def __str__(self):
        # There is no need to re-implement the same logic anymore!
        return self.full_name

现在,full_name 是一个正常的 Person 属性,可以像其他字段一样在所有 Django 组件中使用。

数据库计算的默认值

数据库计算的默认值是在数据库中完全表达 Django 模型结构和关系的最后一个重要障碍。在 Django < 5.0 版本中,Field.default 是为字段设置默认值的唯一选项,但它是在 Python 端计算的,并在添加新行时作为参数传递。因此,从数据库结构的角度来看,它是不可见的,直接在数据库中添加行时也无法设置。

如果考虑到数据库和网络延迟,这也会造成数据不一致的风险,例如,当我们想默认为当前时间点时。此外,对于只能直接访问数据库的人员(如数据库管理员或数据科学家)来说,这也是不可见的。

Django 5.0 通过新的 Field.db_default 选项支持数据库计算的默认值。这是解决与之前方法相关的所有问题的灵丹妙药,因为它允许我们在数据库中定义和计算默认值。它接受字面值和数据库函数。让我们来看一个实际例子:

from decimal import Decimal

from django.db import models
from django.db.models.functions import Now


class Order(models.Model):
    person = models.ForeignKey("Person", models.CASCADE)
    created = models.DateTimeField(db_default=Now())
    priority = models.IntegerField(db_default=0)
    ...

表单字段组渲染

第三个值得一提的重要特性是 Django 5.0 引入的表单字段组渲染概念,这使得表单字段的渲染变得更加简单和可复用。

表单字段通常会伴随着许多相关的属性进行渲染,如帮助文本、标签、错误信息和小部件。每个项目都有自己的 HTML 结构和首选的表单字段渲染方式。假设我们使用基于 <div> 的字段模板(像 Django 那样)来帮助使用辅助技术的用户(例如屏幕阅读器)。我们首选的字段渲染方式可能看起来是这样的:

<div class="form-field">
  {{ field.label_tag }}
  {% if field.help_text %}
    <p class="help" id="{{ field.auto_id }}_helptext">
      {{ field.help_text|safe }}
    </p>
  {% endif %}
  {{ field.errors }}
  {{ field }}
</div>

它与 Django 新增加的 .as_field_group() 方法的默认模板完全相同,因此现在我们可以将其简化为:

<div class="form-field">{{ field.as_field_group }}</div>

.as_field_group() 默认使用 "django/forms/field.html "模板,该模板可按项目、字段或请求进行自定义。这给了我们很大的灵活性。

总结

除了本文介绍的三项重大新特性外,Django 5.0 还在可访问性和异步方面进行了改进。建议大家直接访问官网了解详情。

原文:https://fly.io/django-beats/new-goodies-in-django-50/

***

- EOF -

推荐阅读  点击标题可跳转

1、VS Code 变身小霸王游戏机!

2、认知升级:模型与范式转换

3、超赞的 Python 编译器,单核提速100倍

4、高效的终极秘诀

5、Python 3.12 版本有什么变化?


                                           分享、在看、点赞,3连55ee05634b49470b2f20b943d797f85b.gif

Django配置连接SqlServer(版本Django3.2.5,python3.9) 前言 这两天学习了下Django,因为我使用的数据库是 SqlServer,在模型那里遇到了点问题,这篇文章做下记录。 Django连接数据库,你如果不使用模型,直接使用 pymssql 的话也是没问题的,毕竟通常就是这种嘛,这种的话这里就不说了,大家应该都懂。 开发环境 windows 10 python 3.9 Django 3.2.5 pycharm 2021.2.1 创建工程 使用pycharm创建项目(使用你任何你知道的方式创建一个项目就行了) 这里创建了个新环境,基于py 阅读详情

相关推荐

Django 5.0:您等待的 3 个功能将于 2023 年 12 月公开

Django 是一部诞生于昆汀·塔伦蒂诺 (Quentin Tarantino) 头脑中的精彩西部电影,其灵感并非来自基于 Python 的同名 Web 框架。它最初发布于 17 年前的 2005 年。那一年对人类来说是艰难的一年,但发生了一些重要的事情。YouTube 诞生了。签署京都议定书并举行Live 8音乐会。Django 也是2005 年的婴儿,17 年后它成为使用 Python 构建的 Web 应用程序的黄金标准。别忘了订阅!

iCloudEnd的博客 1085

Django 5.0解析:最新功能和特色的综合指南-2023 年 12 月的完美礼物

祝福大家!随着 2023 年底的临近,我们有一些令人难以置信的消息要分享。Django 5.0 即将推出,这不是普通的更新。此版本标志着一次重大飞跃,肯定会让所有 Django 爱好者兴奋不已,他们将其视为首选的基于 Python 的 Web 框架。就像提前收到一份意想不到的节日礼物!将 Django 5.0 视为熟悉的 Django 4.0 的颠覆性升级。它为我们的网络开发工具库中本已不可或缺的...

Python数据之道 2251

视觉定位避坑指南:基于双mark点的坐标转换常见错误排查

本文详细解析了工业视觉项目中基于双mark点的坐标转换常见错误及排查方法,涵盖旋转矩阵构建、坐标系原点选择、图像预处理优化等关键环节。通过实战案例和代码示例,帮助工程师避免定位偏差,提升系统精度,特别适用于自动化检测和精密制造场景。

7z8x2c4v6b9的博客 167

Django5.0入门基本使用

函数 include() 允许引用其它 URLconfs。每当 Django 遇到 include() 时,它会截断与此项匹配的 URL 的部分,并将剩余的字符串发送到 URLconf 以供进一步处理。在根URLconf 文件中指定我们创建的 polls.urls 模块。在 polls 目录中创建一个 URL 配置,请创建一个名为 urls.py 的文件。

秃了也弱了 2380

从零构建智能监控系统:ZLMediaKit与SpringBoot的RTSP流处理实战

本文详细介绍了如何从零构建智能监控系统,结合ZLMediaKit与SpringBoot实现RTSP流处理。通过多协议支持、高性能架构设计及工业级部署优化,解决传统监控方案的兼容性差、延迟高等问题,适用于物联网和智能安防领域。

weixin_29002209的博客 370

详解ReID的各部分组成及Trick——基于FastReID

这一系列博客将基于京东开源的FastReID进行扩充,详细介绍了ReID的各个组成部分,一些有用的Trick,评价指标,常用数据集等,详细内容见下方的链接,总结不易,如有理解不正确之处,麻烦各位批评指正。 一、FastReID的中的baseline文件配置 二、Training strategy 三、Pre-processing 四、Backbone 五、Aggregation 六、Head 七、Loss 八、Distance Metric 九、Post-processing 十、Evaluation 十一

藏晖的博客 9164

Django-5:django路由层

路由层有名分组与无名分组相同点: 都是将括号内的正则表达式,所匹配到的内容,当做位置参数或者关键字,传给后面的视图函数。不同点: 无名分组没有具体的名字,作为视图函数中的形参时,可做任意名字,如‘XXX’。有名分组,如,就必须是user。无名有名不可以混用但可以同时有多个无名或有名参数。

liuyu_719的博客 1497

Rocky Linux 9.2:利用LVM动态调整/home与/根分区空间分配

本文详细介绍了在Rocky Linux 9.2系统中,如何利用LVM(逻辑卷管理器)动态调整/home与根分区(/)的空间分配。针对根分区空间不足而/home分区闲置的常见问题,文章提供了从检查磁盘布局、备份数据、卸载分区、调整逻辑卷大小到重建文件系统的完整操作步骤,并重点说明了XFS与EXT4文件系统在缩容时的不同处理方法,帮助系统管理员安全、在线地实现存储空间的灵活调配。

weixin_29271263的博客 177

Django 5.0 即将发布!关键新特性一览

你好,我是 EarlGrey,一名双语学习者,会一点编程,目前已翻译出版《Python 无师自通》、《Python 并行编程手册》等书籍。点击上方蓝字关注我,获取最新编程及AI干货、高赞工具和项目分享。在后台回复“books”,即可领取超值优质电子书合集。11月20日,Django团队在博客上发布了 Django 5.1rc1版本,这是5.0正式版发布前最后一个版本,等待译者们提交翻译后即可发布。...

codingpy的博客 2242

UFS Host Controller工作流程

contentsUFS架构图HCI接口架构传输请求接口(Transfer Request Interface)UFS 主机控制器寄存器接口(host controller Interface)UTP 层数据传输Host Software与Host Controller的交互Host Controller初始化配置与控制CRYPTOCFG 配置过程 该文档描述了UFS Host Controller的主要运作流程以及在开源内核代码hisi平台中的host controller的接口函数设计 文档大部分内容参

Frank_sample的专栏 1万+

第一节:初识n8n与下一代工作流自动化

本章介绍了n8n的Fair-code理念与节点式架构,对比了其与Zapier/Make的核心差异,并引导读者在n8n Cloud上完成首次界面导览,建立了工作流自动化的宏观认知。

easeyoo的专栏 105

Python Django 5.0正式发布!

Django 5.0 已正式发布。根据 JetBrains 公布的 2022 Python 开发者调查结果,Python Web 框架的三巨头依旧是 Flask、Django 和 FastAPI。Django 和 Flask 的使用率排名并列第一。Django 5.0 支持最新的 Python 版本,包括 Python 3.10、3.11 和 3.12。此外还引入了字段组 (field group),用于简化 Django 表单字段的相关元素的渲染。

weixin_68789096的博客 1373

【推荐100个unity插件】制作美丽 Unity 景观,增强Terrain材质表现的插件——GTS

GTS地形着色器是一款专为Unity设计的强大工具,可解决地形纹理绘制和光照处理的难题。它提供一键式配置,支持实时调整地形效果,包含细节注入、高度混合、雪注入等核心功能,并兼容网格地形和低多边形模型。插件完美集成Gaia天气系统,支持HDRP细分效果。安装后通过GTS管理器创建配置文件并应用到地形,即可快速生成高质量地形渲染。其模块化设计包含全局设置、网格转换和细节调整等面板,使开发者能灵活控制地形表现,显著提升视觉效果与性能表现。

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 1564

Django5.0正式发布!

django5.0发布新特性,包括:管理员界面的 Facet 过滤器、简化的表单字段渲染模板、数据库计算的默认值、数据库生成的模型字段、声明字段Choice的更多选项等介绍。

cdl3的博客 1462

USB 网卡——RNDIS 控制消息流程

在其控制端点上获取控制消息时,设备必须在通信类接口的中断 IN 端点上返回通知,每当设备可以返回控制消息时,主机就会轮询该通知。需要注意的是,如果设备由于某种原因收到GET_ENCAPSULATED_RESPONSE,并且无法使用控制端点上的有效数据做出响应,则应返回设置为 0x00 的单字节数据包,而不是 stall 控制端点。下表中定义了此传输。收到 RESPONSE_AVAILABLE 通知后,主机使用下表中定义的GET_ENCAPSULATED_RESPONSE 传输从控制端点读取控制消息。

tyustli 371

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Django 5.0正式发布,最流行Python Web框架!

当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。观看全面零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。该字段可在所有支持的数据库后端上使用,以创建始终根据其他字段计算的字段。

白帽阿叁的博客 1214

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Python web框架王者 Django 5.0发布:20周年了!

一晃眼django都有20年了,虽然我现在还在用3.x,有的时候会用钟情fastapi框架,但是我当时刚开始学python web开发的时候确确实实是被django的强大功能迷倒了。:不追风口,不炒概念,每半年给点贴心的小更新,让你安心写业务。哨声响起,我们端起啤酒,对屏幕那头 2005 年的自己喊一句:“嘿,轮子还好用吗?从Python安装,入门,数据分析,爬取股票基金的历史+实时数据,以及如何写一个简单量化策略,策略回测,如何看资金曲线统统都有介绍,非常超值!20年过去,这个以爵士吉他手命名的框架,

cainiao_python的博客 1040

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Django 5.0来啦,能否成为最流行的Python Web框架!

随着 Django 5.0 的发布,Django 4.2 已结束其 mainstream 支持,最后一个小错误修复版本 4.2.8 已于昨天发布。根据 JetBrains 公布的 2022 Python 开发者调查结果,Python Web 框架的三巨头依旧是 Flask、Django 和 FastAPI。此外还引入了字段组 (field group),用于简化 Django 表单字段的相关元素的渲染。支持创建数据库生成的列。该字段可在所有支持的数据库后端上使用,以创建始终根据其他字段计算的字段。

2401_86168842的博客 798

Django admin 样式显示不正常

静态文件都正常加载,但样式显示不正常 求解。 python 3.7.5 Django 3.0

qq_34919833的博客 1587

Django5.0发布

我就更新一篇Django5.0的更新分析。

weixin_42908597的博客 1407

Django 5.0正式发布,最流行Python Web框架

随着 Django 5.0 的发布,Django 4.2 已结束其 mainstream 支持,最后一个小错误修复版本 4.2.8 已于昨天发布。该特性简化了 Django 表单字段相关元素的渲染,例如标签、小部件、帮助文本和错误等。根据 JetBrains 公布的 2022 Python 开发者调查结果,Python Web 框架的三巨头依旧是 Flask、Django 和 FastAPI。此外还引入了字段组 (field group),用于简化 Django 表单字段的相关元素的渲染。

A18285759691的博客 1248

Django 2.0 官方中文文档终于发布啦! 附链接!

对于很多想从事学习Django Web开发的很多人而言,Django一直没有官方的中文文档是个弊端。而且Django更新较快,国内很多翻译版本都太滞后了。现在小编我告诉大家一个好消息!! Django 2.0 官方中文文档终于发布啦! 这无疑会进一步推动Python Web开发框架一哥Django在国内的普及和应用。为此小编我是真心高兴。如果你在学习Django框架,现在又多了个理由坚持下去...

大江狗 5万+

一周学会Django5 Python Web开发-Django5 Hello World编写

前面对应用创建和应用配置掌握后,我们来编写第一个Hello World应用吧。体验一把Django5的项目开发过程。

java1234的博客 3242

Django 6.0迁移指南:完整升级原生模板partials的5个步骤

Django 6.0 正式将**模板 partials(Template Partials)**纳入核心功能,这意味着长期流行的 `django-template-partials` 库使命已达成。对于正在使用该库的开发者来说,**Django 6.0迁移** 既是好消息也是待办事项:好消息是功能已官方化,待办是旧代码需要清理。本文提供一份完整的 **Django模板partials迁移指南**,

gitblog_01110的博客 412

Django 4.0版本的主要变化!你还在用哪个版本?

Django 4.0已经于2021年12月正式发布,标志着Django 4.X时代的来临。作为Django的忠粉们,你们准备新版本里令人激动人心的变化了吧? 去年一年非常忙,请原谅这篇迟到...

大江狗 1万+
上一篇: 3 天 5000 星标!支持永久保存微信聊天记录,生成年度报告
下一篇: 一个超越 SQLite 的数据库!
codingpy
博客等级 码龄11年 1870粉丝 104原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值