最近两年,Django的版本号提升得特别快,2.0还没有多久,很快就要到3.0了。

让我们先看看官方的路线图和时间表:

版本号 发布日期 停止更新日期 停止维护日期
3.0 2019-12 2020-08 2021-04
3.1 2020-08 2021-04 2021-12
3.2 LTS 2021-04 2021-12 2024-04

可以看到2019年12月即将发布3.0,2022年升级为4.0,但我们感觉2.2还在昨天。

这给广大的使用者和学习者带来了一定的学习压力和升级成本,但同时也代表Django的生态圈非常健康,使用者稳步上升,功能迭代迅速,是一种好的现象,我们要积极拥抱变化,拒绝落后。

接下来,让我们看看3.0究竟有哪些新东西和新变化。

Python兼容性

不再支持3.6以下版本,仅支持3.6、3.7、3.8或者更高版本。

(按照Django的一贯策略,最新的Django请使用最新的python。)

ASGI

这是Django3.0最大的变化和提升!

通过支持ASGI,Django3.0开始具备全双工的异步通信能力,解决其最大的短板,不再被人诟病!(Tornado的支持者拿这个说事已经不是一天两天了)

支持ASGI并不是取代现有的WSGI,而是一种补充,也就是说我们现在有两种服务器运行模式了。

要注意的是,只有在启动了基于ASGI的服务器之后,才支持异步通信功能。在ASGI模式下,同时支持异步和同步通信。(WSGI模式下只能同步通信)

Django官方提供了一份部署ASGI的文档https://docs.djangoproject.com/en/3.0/howto/deployment/asgi/,值得学习一下。

ASGI的引入也带来了一些需要注意的事项:Django现在会监视异步事件循环,并阻止你从异步上下文中调用被标记为异步不安全的代码,比如ORM操作(注意,这不是说ORM不能用了)。如果你遇到SynchronousOnlyOperation错误,请仔细检查代码并将所有数据库操作移至同步子线程中。

MariaDB

支持MariaDB 10.1或者更高版本。

PostgreSQL

通过为模型添加Meta.constraints选项,可以在PostgreSQL数据库中添加exclusion约束。

过滤表达式

现在可以在QuerySet过滤操作中直接使用输出布尔值的表达式,而不用先聚合再过滤。

模型字段可选项的枚举

新增枚举类TextChoicesIntegerChoicesChoices ,它们都是Field.choices的子类。也就是说你以后不用在CharField中添加choices参数了,可以直接创建一个TextChoices对象。

小功能

下面是一些细微的变化(省略了一些不常用的)

django.contrib.admin

  • ModelAdmin.list_display添加admin_order_field支持
  • ModelAdmin.get_inlines()方法允许根据请求或模型实例指定为inline模式
  • Select2库从4.0.3版本升级到4.0.7
  • jQuery从3.3.1版本升级到3.4.1

django.contrib.auth

  • PasswordResetConfirmView可以增加新的reset_url_token属性

  • 新增BaseBackend类,以简化认证后端的自定义。
  • 新增get_user_permissions()方法,以镜像现有的get_group_permissions()方法。
  • 为HTML页面中的用户名、电子邮件和密码字段的小部件中添加了autocomplete属性,以更好地与浏览器器进行交互。
  • 当执行createsuperuser 命令时,如果在非交互模式下未提供相应的命令行参数,将退回到密码和必填字段的环境变量。
  • ManyToManyField现在可以使用REQUIRED_FIELDS
  • 新的UserManager.with_perm()方法将返回具有指定权限的用户。
  • PBKDF2密码哈希器的默认迭代计数从150,000增加到180,000。

django.contrib.sessions

新的get_session_cookie_age() 方法允许动态指定会话cookie的生存周期。

Models

  • 新增哈希数据库功能MD5, SHA1, SHA224, SHA256, SHA384,和 SHA512。

  • 添加了Sign数据库功能。

  • FilePathField现在接受可调用对象

  • 自引用的 ManyToManyField字段允许使用对称的中间表

  • AvgSum聚合功能现在支持distinct参数,可以去重。

  • 新增SmallAutoField字段,类似AutoField字段,区别在于前者只允许一个较小的值范围,比如从1到32767,这样会更安全一点。

  • AutoFieldBigAutoField以及 SmallAutoField分别继承了IntegerFieldBigIntegerFieldSmallIntegerField,所以其系统检查和验证器也相应分别继承。

  • FileField.upload_to现在支持pathlib.Path

  • CheckConstraint 在MySQL 8.0.16+上被支持。

Django3.0 向后不兼容

(简要介绍一下)

  • 不再支持9.5以下的PostgreSQL
  • 不再支持12.2以下的Oracle
  • 正式删除Python 2兼容性相关的API
  • 某些安全设置现在具有更安全的默认值:X_FRAME_OPTIONS现在默认为'DENY'SECURE_CONTENT_TYPE_NOSNIFF现在默认为True
  • 不再支持1.2.0以下的pywatchman

Django3.0中废弃的一些功能

django.utils.encoding.force_text() and smart_text()

一些django.utils中的和http、translation、text等相关的内容。

Django 3.0中删除的功能

以下方法、属性和设置被删除了:

  • django.db.backends.postgresql_psycopg2模块
  • django.shortcuts.render_to_response() 方法
  • DEFAULT_CONTENT_TYPE设置
  • HttpRequest.xreadlines() 方法
  • Field.from_db_value()Expression.convert_value()方法
  • QuerySet.earliest()latest()field_name关键字参数

  • django.utils.http.cookie_date() 方法
  • staticfilesadmin_static模板标签库
  • django.contrib.staticfiles.templatetags.staticfiles.static() 方法

总结

从版本说明中我们可以看出,Django3.0最核心的变化是支持基于ASGI的异步通信,其它细微的改动一般用户基本感受不出来。

异步通信的功能据说是将django-channle这个外部库纳入进来,作为Django官方核心标准功能之一。无论如何,HTML5的websocket将可以直接和Django进行通信了。基于Django实现网页聊天室、网页QQ、网页微信等实时通信应用将变得简单,我们可以和长短轮询说再见了。

(更多Django相关内容和最新变化,请关注我的官网www.liujiangblog.com,相关最新教学视频也将第一时间发布!)

Django3.0 前瞻 支持异步通信的更多相关文章

  1. Django3.0中向后不兼容的更改

    3.0中向后不兼容的更改 数据库后端API 本节描述了第三方数据库后端中可能需要的更改. 现在的第二个参数DatabaseIntrospection.get_geometry_type()是行描述,而 ...

  2. Django3.0 异步通信初体验

    此前博主曾经写过一篇博文,介绍了Django3.0的新特性,其中最主要的就是加入对ASGI的支持,实现全双工的异步通信. 2019年12月2日,Django终于正式发布了3.0版本.怀着无比的期待,我 ...

  3. Django3.0 异步通信初体验(小结)

    2019年12月2日,Django终于正式发布了3.0版本.怀着无比的期待,我们来尝试一下吧! (附ASGI官方文档地址:https://asgi.readthedocs.io/en/latest/e ...

  4. CozyRSS开发记录18-番外之Atom1.0的支持

    CozyRSS开发记录18-番外之Atom1.0的支持 1.对CozyRSS.Syndication批判一番 由于我工作的主要开发语言是c++,所以会看到我的c#代码写得非常朴素,很多语法糖都没有用上 ...

  5. STSdb,最强纯C#开源NoSQL和虚拟文件系统 4.0 RC2 支持C/S架构

    STSdb是什么 再来说明一下STSdb是什么:STSdb是C#写的开源嵌入式数据库和虚拟文件系统,支持实时索引,性能是同类产品的几倍到几十倍,访问官方网站. 温故知新 之前发了文章<STSdb ...

  6. 亲测!Jquery2.0不支持IE8-了

    最近由于测试需要,Win7回退到了官方更新的IE8浏览器,惊人的发现: <script src="//cdn.bootcss.com/jquery/2.0.0/jquery.min.j ...

  7. [OIDC in Action] 3. 基于OIDC(OpenID Connect)的SSO(添加Github OAuth 2.0的支持)

    在上上一篇基于OIDC的SSO的登录页面的截图中有出现QQ登录的地方.这个其实是通过扩展OIDC的OpenID Provider来实现的,OpenID Provider简称OP,OP是OIDC的一个很 ...

  8. 【树莓派】【转】树莓派3装Android 6.0,支持Wi-Fi和蓝牙

    树莓派3装Android 6.0,支持Wi-Fi和蓝牙 相信对于许多树莓派初学者(包括我)来说,Android系统的确是一个不错的选择.但国内这方面资源稀缺,经本人FQ苦寻,找到了老外的树莓派Andr ...

  9. C# 6.0可能会支持模式匹配了

    今天在CodePlex的Roslyn讨论区发现了一个帖子:Draft spec for records and pattern-matching in C#,估计MS计划在C# 6.0中支持模式匹配了 ...

随机推荐

  1. vue中监听路由参数的变化

    在vue项目中,假使我们在同一个路由下,只是改变路由后面的参数值,期望达到数据的更新. mounted: () =>{ this.id = this.$route.query.id; this. ...

  2. FCC---CSS Flexbox: Add Flex Superpowers to the Tweet Embed

    To the right is the tweet embed that will be used as the practical example. Some of the elements wou ...

  3. js效果 整理

    整理中... 1.js获取页面及元素高度.宽度 其他参考文献:http://www.open-open.com/lib/view/open1420120422531.html js: 网页可见区域宽: ...

  4. 部署vue-element-admin流程

    1.修改环境变量: 在以下两个文件: .env_staging [如果修改这个,需要以npm run build:stage启动] .env_production [如果修改这个,需要以npm run ...

  5. STM32-24位AD7799驱动之手册代码详解,支持模拟SPI和硬件SPI

    1.AD7799介绍 AD7799结构图如下所示: 其中REFIN参考电压建议为2.5V, REFIN电压低于0.1V时,则差分输入ad值就无法检测了,如下图所示: 注意: 如果REG_CONFIG的 ...

  6. Github访问速度很慢的原因,以及解决方法

    1,CDN,Content Distribute Network,可以直译成内容分发网络,CDN解决的是如何将数据快速可靠从源站传递到用户的问题.用户获取数据时,不需要直接从源站获取,通过CDN对于数 ...

  7. 后端必备 Nginx 配置

    后端必备 Nginx 配置 概要 防盗链 根据文件类型设置过期时间 静态资源访问 日志配置 日志字段说明 access_log 访问日志 error_log 日志 日志切割 反向代理 禁止指定user ...

  8. LeetCode刷题191121

    博主渣渣一枚,刷刷leetcode给自己瞅瞅,大神们由更好方法还望不吝赐教.题目及解法来自于力扣(LeetCode),传送门. 数据库: 编写一个 SQL 查询,来删除 Person 表中所有重复的电 ...

  9. Mybatis XML映射文件

    mybatis为聚焦于SQL而构建,SQL映射文件常用的顶级元素如 resultMap,是最复杂也是最强大的元素,用来描述如何从数据库结果集中来加载对象. insert,映射插入语句 update, ...

  10. Linux中crontab定时任务

    crontab安装(centOS) yum -y install vixie-cron crontab语法(计划任务) crontab [-u user] file crontab [-u user] ...