写点什么

Django 3.0 版本正式发布,支持异步功能

  • 2019-12-04
  • 本文字数:1627 字

    阅读完需:约 5 分钟

Django 3.0 版本正式发布,支持异步功能

2019 年 12 月 2 日,Django 官方博客发布了 Django 3.0 的发布说明,Django 3.0 正式版真的来啦!


Django 是一款用于开发 Web 应用程序的高级 Python 框架,Pinterest,Instagram 和 NASA 等网站都是使用该框架来编写的。虽然 Django 一直占据着 Python Web 开发界的头把交椅,但其不支持异步一直困扰着开发者,而 Django 3.0 正式版本终于支持 ASGI 了,这不免让开发者兴奋。

Django 3.0 的新功能

除了前文提到的支持 ASGI,Django 3.0 还涵盖了很多新的功能,下面我们就详细解读一下这些新功能。

Python 版本支持

Django 对 Python 版本的支持一向是很积极的,Django 3.0 只支持 Python 3.6 以上的版本,即 Python 3.6、3.7 和 3.8,Django 2.2.X 系列成为了最后一个支持 Python 3.5 的系列。

数据库支持

Django 3.0 在数据库支持方面的最大亮点是正式支持了 Maria 开发 DB 10.1 及更高版本。对于开发者来说,又多了一种数据库选择,且 MariaDB 与 MySQL 类似,但是存储引擎类型更多,查询效率更快。


在支持新数据库的同时,Django 3.0 版本也放弃了对某些数据库版本的支持。2019 年 12 月,Django 将结束对 PostgreSQL 9.4 的上游支持,转而支持 PostgreSQL 9.5 及更高版本;2021 年 7 月将结束对 Oracle 12.1 的上游支持,正式支持 Oracle 12.2 和 18c。另外,需要注意的是,Django 2.2 对 Oracle 12.1 的支持也将在 2022 年 4 月结束。

ASGI 支持

ASGI 支持可以说是开发者最期待的 Django 3.0 的新功能。ASGI 是异步网关协议接口,是介于网络协议服务和 Python 应用之间的标准接口,能够处理多种通用的协议类型,包括 HTTP,HTTP2 和 WebSocket。


Django 3.0 对 ASGI 模式的支持使得 Django 可以作为原生异步应用程序运维,原有的 WSGI 模式将围绕每个 Django 调用运行单个事件循环,以使异步处理层与同步服务器兼容。


在这个改造的过程中,每个特性都会经历以下三个实现阶段:


  • Sync-only,只支持同步,也就是当前的情况

  • Sync-native,原生同步,同时带有异步封装器

  • Async-native,原生异步,同时带同步封装器


需要注意的是,在异步事件循环时,Django 会阻止调用异步上下文中标记为“async unsafe”的代码,例如 ORM 操作。如果直接使用异步代码之前的 Django,那么很可能就会触发这个问题,如果发生了 SynchronousOnlyOperation 错误,需要仔细检查代码并将所有数据库操作移至同步子线程中。

PostgreSQL 的排斥约束

新 ExclusionConstraint 类允许在 PostgreSQL 上添加排除约束。使用 Meta.constraints 选项将约束添加到模型 。

模型字段选择的枚举

Django 3.0 可以自定义枚举类型 TextChoices、IntegerChoices 和 Choices 来定义 Field.choices。其中,TextChoices 和 IntegerChoices 类型用于文本和整数字段,Choices 类允许定义其他具体数据类型的兼容枚举。


以上这些自定义枚举类型几乎包含了所有用户可读的标签,同时可以通过枚举或者成员的属性来翻译和访问这些标签。更多详细信息和示例,请参见枚举类型

不再支持的功能

除了增加新功能,Django 3.0 版本也弃用了一些旧功能,包括但不限于:


  • django.db.backends.postgresql_psycopg2 模块

  • django.shortcuts.render_to_response()

  • DEFAULT_CONTENT_TYPE 设置

  • HttpRequest.xreadlines()

  • 支持 context 的 Field.from_db_value()和 Expression.convert_value()

  • field_name 的关键字参数 QuerySet.earliest()和 latest()

  • ForceRHRGIS 功能

  • django.utils.http.cookie_date()

  • staticfiles 和 admin_static 的模板标签库

  • django.contrib.staticfiles.templatetags.staticfiles.static;

版本兼容性问题

Django 3.0 发布之后,很多开发者都会关心 Django 3.0 对之前版本的兼容性。官方给出的建议是:第三方应用程序的开发者最好放弃使用 Django 2.2 之前的版本。开发者可以使用 python -Wd 运行包进行测试,如果出现了弃用警告,那么就要及时修复,以便应用程序能够与 Django 3.0 兼容。


除了版本兼容问题,关于数据库后端、安全、默认值等具体兼容性问题,可以查看此处


2019-12-04 13:536973
用户头像

发布了 509 篇内容, 共 349.9 次阅读, 收获喜欢 1927 次。

关注

评论

发布
暂无评论
发现更多内容

Browser Use 浏览器自动化 Agent:让浏览器自动为你工作

测试人

人工智能 软件测试

《金铲铲之战》鸿蒙版9月25日上架,Mate XTs超宽视界颠覆游戏体验

最新动态

理论到实战,高可用架构踩坑说明书

京东零售技术

TCA MCP Server | 释放代码潜能,开启极速开发

六月的雨在InfoQ

腾讯云MCP场景教程

四季作曲家,HarmonyOS 5让音符玩起来

最新动态

新客户 | TDengine 时序数据库赋能开源鸿蒙物联展区实时监控与展示

TDengine

tdengine 时序数据库

轻松管理项目进度:MZGantt甘特图工具入门指南

Tecjt_锦图科技

JavaScript vue.js 甘特图 插件 软件项目

为什么越来越多的企业选择 iPaaS?一文读懂数据集成的未来

谷云科技RestCloud

API 数据同步 数据集成 集成平台 ipaas

为什么MES总要定制?低代码MES才是未来

万界星空科技

低代码 低代码平台 mes 万界星空科技mes 万界星空科技低代码平台

旅行规划新纪元:腾讯元宝大模型 × MCP Server扩展生态

六月的雨在InfoQ

Kafka配置SASL_SSL认证传输加密

天翼云开发者社区

kafka 分布式消息服务

数智先锋 | 重大活动零错误运行!Bonree ONE为安踏体育应用性能稳健护航

博睿数据

ETL VS ELT企业应该怎么选择数据集成方式

谷云科技RestCloud

数据传输 数据同步 ETL ELT 数据集成平台

技术文章

qife122

人工智能 openai

华为Mate XTs三折叠登场!PC应用让移动办公比肩桌面效率

最新动态

快递地址信息自动识别全攻略:从技术原理到落地实践

快递鸟

隐形猎鹰利用微软零日漏洞CVE-2025-33053的技术分析

qife122

网络安全 APT攻击

大数据-88 Spark Super Word Count 全流程实现(Scala + MySQL)

武子康

Java 大数据 flink spark 分布式

“卧槽,系统又崩了!”——别慌,这也许是你看过最通俗易懂的分布式入门

poemyang

分布式 分布式系统 分布式协议 拜占庭将军问题

爱回收:拥抱HarmonyOS,引领回收行业新趋势

最新动态

让鲜花不只绽放在手中:HarmonyOS助力花农直连市场

最新动态

奋斗正青春,HarmonyOS 5助音乐回归纯粹

最新动态

2025年8月文章一览

codists

Python

AI如何赋能UI设计和代码生成?AI产品设计实战分享

职场工具箱

人工智能 AI 产品设计 代码生成 ui设计

8 月热搜精选

KaiwuDB

数据库

Windows Server 2025 Active Directory权限提升漏洞检测工具

qife122

PowerShell ActiveDirectory

“人工智能+”驶入快车道,和鲸联合联想、沐曦首发科研智能一体机

ModelWhale

联想 和鲸 科研智能一体机 沐曦

元数据驱动开发:inBuilder破解数据库文档同步难题的实践

inBuilder低代码平台

Flink Parallelism、Flink Slot的关系

天翼云开发者社区

大数据 计算

淘宝商品详情API数据解析(附代码)

tbapi

淘宝API 淘宝商品数据采集 淘宝商品详情API 淘宝数据分析

哈尔滨三级等保:为关键信息系统打造坚固安全防线

等保测评

Django 3.0 版本正式发布,支持异步功能_编程语言_田晓旭_InfoQ精选文章