2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

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:536962
用户头像

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

关注

评论

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

基于PINN的传播动力学研究

飞桨PaddlePaddle

人工智能 百度 paddle 飞桨 百度飞桨

中国电信与国家信息中心共同发布国信政务云

天翼云开发者社区

云计算 政务云

为什么要选择文件传输软件?有哪些最佳高速文件传输软件?

镭速

文件传输软件

那些 MySQL 8.0 中的隐藏特性

爱可生开源社区

MySQL 8.0

HTML5 Canvas 和 SVG哪个简单好用

2D3D前端可视化开发

html5 SVG 数据可视化 canvas 前端设计

三言两语说透webpack对vue的编译

互联网工科生

源码 Vue webpack

文心一言 VS 讯飞星火 VS chatgpt (72)-- 算法导论7.1 3题

福大大架构师每日一题

福大大架构师每日一题

用低代码开发平台构建高效敏捷工作流

力软低代码开发平台

使用 RKE 方式搭建 K8s 集群并部署 NebulaGraph

NebulaGraph

k8s

一文读懂快速开发平台

互联网工科生

低代码 开发平台 JNPF

华为阅读与博集新媒达成合作 推进数字化阅读高质量发展

最新动态

拓展知识 启望未来 | 记内蒙古移动《AntDB ACA初级认证培训》活动

亚信AntDB数据库

数据库 AntDB AntDB数据库

大文件传输软件| 生命科学中的关键因素

镭速

大文件传输快速

NFTScan | 07.31~08.06 NFT 市场热点汇总

NFT Research

NFT\

JMeter源码解析之结果收集器

优测云服务平台

Jmeter 性能测试 压力测试 #性能测试

拨开迷雾:利用全链路消息跟踪揭示系统奥秘

鲸品堂

数据库 分布式 全链路 企业号 8 月 PK 榜

Llama2 评测大公开!知识库场景下能否赶超 ChatGPT?

Zilliz

Zilliz Towhee ChatGPT llama llama2

阿里云 EMAS & 魔笔:7月产品动态

移动研发平台EMAS

阿里云 消息推送 移动开发 低代码开发 app自动化测试

企业选择大文件传输软件的真正原因

镭速

大文件传输软件

AREX 如何支持 Dubbo 自定义私有协议的录制回放

AREX 中文社区

dubbo 自动化测试 流量回放 流量录制

斩获可信云最佳实践,天翼云存储资源盘活系统助力“一云多芯”!

天翼云开发者社区

云计算 存储

使用appuploader工具流程(Windows版本)

AI融入管理软件,是否会是下一个“ERP时代”的前奏?

B Impact

CommunityOverCode Asia 专题介绍之流处理

Apache Flink

大数据

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