zoukankan      html  css  js  c++  java
  • Django3.0 前瞻 支持异步通信

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

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

    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还在昨天。

    这给广大的使用者和学习者带来了一定的学习压力和升级成本,但同时也代表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,相关最新教学视频也将第一时间发布!)

  • 相关阅读:
    HDU 1058 Humble Numbers
    HDU 1160 FatMouse's Speed
    HDU 1087 Super Jumping! Jumping! Jumping!
    HDU 1003 Max Sum
    HDU 1297 Children’s Queue
    UVA1584环状序列 Circular Sequence
    UVA442 矩阵链乘 Matrix Chain Multiplication
    DjangoModels修改后出现You are trying to add a non-nullable field 'download' to book without a default; we can't do that (the database needs something to populate existing rows). Please select a fix:
    opencv做的简单播放器
    c++文件流输入输出
  • 原文地址:https://www.cnblogs.com/django-dev/p/11627118.html
Copyright © 2011-2022 走看看