写点什么

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

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

关注

评论

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

axios框架入门教程

倔强的牛角

axios 6月月更

Java String 文字(Literal)和 对象(Object)初始化

HoneyMoose

一文走近ZMQ

No Silver Bullet

6月月更 ZMQ

IDE 的主题应该用亮色还是暗色?终极答案来了!

胡说云原生

ide vscode IDEA goland ide主题

如何进行高效简洁的电子文档管理

小炮

社恐?自我介绍时大脑一片空白?

阿Q说代码

个人成长 社恐 职场破冰 入职公司

Fabric.js IText 手动设置斜体 🎋

德育处主任

JavaScript 前端 canvas Fabric.js 6月月更

Java String 手工引用指针

HoneyMoose

Linux开发_curl调用网络接口

DS小龙哥

6月月更

DingOS服务提交IPO配置指南

鼎道智联

前端 开发 IPO配置

Java String 构造方法中的内存分配

HoneyMoose

面试突击59:一个表中可以有多个自增列吗?

王磊

Java 面试

Gitlab运维篇之——备份及恢复

阿呆

#GitLab 备份恢复

今天,SysAK 是如何实现业务抖动监控及诊断?&手把手带你体验Anolis OS|第25-26期

OpenAnolis小助手

Linux sig 龙蜥大讲堂 开源贡献 社区运维

【直播回顾】战码先锋第六期:共建测试子系统,赋能开发者提高代码质量

OpenHarmony开发者

OpenHarmony

智能合约dapp系统开发模式定制方案

开发微hkkf5566

Java 字符串引用(String Interning)

HoneyMoose

Java String 性能和优化

HoneyMoose

深圳java培训 | Java设计模式之建造者模式

@零度

设计模式 JAVA开发

5道面试题,拿捏String底层原理!

码农参上

string 底层原理 死磕 Java 基础

社区文章|MOSN 构建 Subset 优化思路分享

SOFAStack

负载均衡 开源 开发者 算法

攻防演练 | 基于ATT&CK的威胁狩猎实践案例

青藤云安全

网络安全 攻防演练 威胁狩猎

钟珊珊:被爆锤后的工程师会起飞|OneFlow U

OneFlow

自我介绍 实习

缓存穿透利器之「布隆过滤器」

Ayue、

redis 布隆过滤器

2022年盲盒软件开发商业模式深度解析

开源直播系统源码

软件开发 盲盒开发 盲盒软件

本周四晚19:00战码先锋第7期直播丨三方应用开发者如何为开源做贡献

OpenHarmony开发者

OpenHarmony

我对新能源汽车的一些看法(37/100)

hackstoic

新能源汽车 生活杂谈

Eureka的InstanceInfoReplicator类(服务注册辅助工具)

程序员欣宸

Java SpringCloud 6月月更

DOM编程

大熊G

JavaScript 前端 6月月更

Java自定义Once方法保障单次执行

FunTester

PHP开发的网站,如何实现批量打印快递单的功能?

迷彩

编程 记录 开发 php扩展 6月月更

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