Django3.0 前瞻 支持异步通讯

最近两年,Django的版本号提高得特别快,2.0尚未多久,很快就要到3.0了。python

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

1

版本号 发布日期 中止更新日期 中止维护日期
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还在昨天。sql

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

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

Python兼容性

再也不支持3.6如下版本,仅支持3.六、3.七、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,相关最新教学视频也将第一时间发布!)

相关文章
相关标签/搜索