写点什么

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

发布了 497 篇内容, 共 328.5 次阅读, 收获喜欢 1923 次。

关注

评论

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

BAT华为等一线大厂Java工程师必读书单

爱好编程进阶

Java 程序员 后端开发

CoProcessFunction实战三部曲之三:定时器和侧输出

爱好编程进阶

Java 程序员 后端开发

CTO 说了,用错 @Autowired 和

爱好编程进阶

Java 程序员 后端开发

GNN在下拉推荐的应用

爱好编程进阶

Java 程序员 后端开发

Stack 顿悟三部曲(3):溯源 goroutine 堆栈

蓬蒿

golang 堆栈 协程 stack goroutine

Java 生成随机数的 5 种方式,你知道几种?

爱好编程进阶

Java 程序员 后端开发

EL和JSTL基本使用

爱好编程进阶

Java 程序员 后端开发

4月份,我月更了 25 篇文章,撸了 4w 多字

杨成功

程序员 数据结构 前端

Java面试前的敲门砖:多线程+微服务spring源码+Redis+docker+Git

Java架构追梦

Java 后端开发 程序员面试

java 通过 SmbFile 类操作共享文件夹

爱好编程进阶

程序员 后端开发

AliIAC 智能音频编解码器:在有限带宽条件下带来更高质量的音频通话体验

阿里云CloudImagine

语音 音频 视频云 音频编码器

【INFOCOM 2022】支持任意网络拓扑的同步流水线并行训练算法,有效减少大规模神经网络的训练时间

阿里云大数据AI技术

神经网络 机器学习 算法 并行训练算法

java poi 读取Excel中的手机号或电话号码,手机号变成1

爱好编程进阶

程序员 后端开发

Java StringBuffer 动态字符串

爱好编程进阶

程序员 后端开发

OneFlow如何做静态图的算子对齐任务

OneFlow

人工智能 graph 自动测试 算子对齐

centos7的启动流程(systemctl)

爱好编程进阶

Java 程序员 后端开发

Java 类型信息详解和反射机制

爱好编程进阶

Java 程序员 后端开发

造孽啊!阿里内部的神级项目和JDK源码阅读指南竟惨遭GitHub开源

Java架构追梦

Java 程序员 后端开发

ETL自动化运维调度管理工具 TASKCTL 流程文件系统

敏捷调度TASKCTL

程序员 DevOps 运维 ETL 大数据运维

FastDFS 和nginx整合

爱好编程进阶

Java 程序员 后端开发

刷了三个月leetcode算法,顺利拿下百度、阿里等大厂的offer

Java架构追梦

Java 后端开发 数据与算法

CGBTN2111-DAY02总结复习

爱好编程进阶

Java 程序员 后端开发

上市商业银行手机银行场景建设专题分析

易观分析

商业银行 手机银行

Day200

爱好编程进阶

Java 程序员 后端开发

IDEA的Docker插件实战(Dockerfile篇)

爱好编程进阶

Java 程序员 后端开发

中小型企业团队的CRM系统最佳实践

低代码小观

低代码 CRM 客户关系管理 CRM系统 客户关系管理系统

2022金蝶云苍穹峰会抢先看

金蝶云·苍穹

苍穹峰会 苍穹5.0 人力云

CRUD勿进,全身心投入才能读懂腾讯P8亲码的“Java微服务

爱好编程进阶

Java 程序员 后端开发

Stack 顿悟三部曲(2):穿越虚拟内存的迷雾

蓬蒿

线程 cpu 堆栈 进程

Go流程控制——条件语句

爱好编程进阶

Java 程序员 后端开发

GroupingComparator分组

爱好编程进阶

Java 程序员 后端开发

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