写点什么

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

2019 年 12 月 04 日

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:535810
用户头像
田晓旭 InfoQ 编辑

发布了 419 篇内容, 共 195.2 次阅读, 收获喜欢 1266 次。

关注

评论

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

重点人员管控系统开发,情报研判系统搭建

t13823115967

重点人员管控系统开发 情报研判系统搭建

DocView 现在支持自定义 Markdown 模版了!

程序员小航

markdown IDEA idea插件 文档生成

区块链司法可信存证,版权维护应用落地

t13823115967

区块链司法可信存证 版权维护应用落地

JVM Metaspace内存溢出排查与总结

Java老k

Java OOM 内存溢出 metaspace

训练营第五周作业

爱码士

训练营

前端如何实现一键截图功能?

徐小夕

Java 前端 React 前端训练 前端进阶

区块链商品溯源系统开发,数据上链应用落地方案

WX13823153201

从资源管理角度认识K8S

LorraineLiu

Kubernetes 云原生 k8s k8s入门

大整数算法

落曦

训练营第5周学习总结

爱码士

训练营

新思科技:ISO/SAE 21434标准即将发布 你准备好了吗?

InfoQ_434670063458

新思科技 汽车软件安全

新图灵测试背后,智能交互点燃了哪些产业可能性?

脑极体

架构设计:高并发读取,高并发写入,并发设计规划落地方案思考

互联网应用架构

高并发读,高并发写

甲方日常 55

句子

工作 随笔杂谈 日常

贼好用,冰河开源了这款精准定时任务和延时队列框架!!

冰河

redis 中间件 消息队列 延时队列 Zset

Java踩坑记系列之线程池

Java老k

Java 线程池

贞炸了!上线之后,消息收不到了!

楼下小黑哥

Java RocketMQ MQ

年轻人你不讲武德,自己偷着学习!spring Security五套「源码级」笔记哪里来的?我也要!

Java架构追梦

Java 源码 架构 面试 spring security

架构师训练营第 1 期第 10 周作业

业哥

OAuth 2.0授权框架详解

程序那些事

OAuth 2.0 程序那些事 Oauth 授权框架 安全框架

linux开发各种I/O操作简析,以及select、poll、epoll机制的对比

良知犹存

linux开发

聊聊在国企当程序员的这三年,这样的生活真的是你想要的吗?

Java架构师迁哥

奉劝各位Java工程师都要学习这份阿里内部绝密《百亿级并发系统设计》实战教程,大厂面试官可“不讲武德”!

Java架构之路

Java 程序员 架构 面试 编程语言

乘上这艘“智能体”之舟,即刻前往智慧未来

脑极体

MySQL选错索引导致的线上慢查询事故

Zhendong

Java MySQL

怎么做好一场分享或者培训

fq

anyRTC uni-app 跨平台SDK 发布!总有一款适合你!

anyRTC开发者

uni-app 音视频 WebRTC RTC

《华为数据之道》读书笔记:序言

方志

数据中台 数字化转型 数据治理

《华为数据之道》读书笔记:第1章 数据驱动的企业数字化转型

方志

数据中台 数据湖 数据治理

2021年全球公有云终端用户支出将增长18% ;EMNLP 2020最佳论文:无声语音的数字发声

京东智联云开发者

程序人生

探秘RocketMQ源码【1】——Producer视角看事务消息

阿里云金融线TAM SRE专家服务团队

开源 RocketMQ 中间件 开源代码 消息中间件

2021年,算法还“香”吗?

2021年,算法还“香”吗?

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