Django 3.0 发布 异步框架的到来

这里写自定义目录标题

  • 官方的路线图和时间表:
    • 新的改变
      • Python兼容性
      • ASGI
      • MariaDB
      • PostgreSQL
      • 过滤表达式
      • 模型字段可选项的枚举
      • 小功能
        • django.contrib.admin
        • django.contrib.auth
        • django.contrib.sessions
      • Models
    • Django3.0 向后不兼容
    • Django3.0中废弃的一些功能
    • Django 3.0中删除的功能
  • 总结

Django 3.0 发布 异步框架的到来_第1张图片
Django开发企业实战 面向就业/升职(中高级教程)

Django高级实战 开发企业级问答网站

​Tornado从入门到进阶 打造支持高并发的技术论坛

引爆潮流技术
Vue+Django REST framework打造生鲜电商项目前后端分离+RESTFul API+Django进阶

Python前后端分离开发Vue+Django REST framework实战

到网易云课堂搜索 《VueJs前端框架 iView 知识点精讲》视频分享地址:
https://study.163.com/course/introduction/1209401891.htm?share=2&shareId=400000000535031

到网易云课堂搜索 《Django高级实战教程》 视频分享地址: https://study.163.com/course/introduction/1209407824.htm?share=2&shareId=400000000535031

到网易云课堂搜索 《DRF与iView实战在线教育博客网站》 Django Rest Framework与VueJs的iView 前端库打造前后端分离的在线教育与博客平台 https://study.163.com/course/introduction/1209447822.htm?share=2&shareId=400000000535031

到网易云课堂搜索 《Tornado框架与Element框架实战》视频分享地址:
https://study.163.com/course/introduction/1209485881.htm?share=2&shareId=400000000535031

官方的路线图和时间表:

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

让我们先看看官方的路线图和时间表:
Django 3.0 发布 异步框架的到来_第2张图片
可以看到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过滤操作中直接使用输出布尔值的表达式,而不用先聚合再过滤。

模型字段可选项的枚举

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

小功能

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

django.contrib.admin

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

django.contrib.auth

1 PasswordResetConfirmView可以增加新的reset_url_token属性

2 新增BaseBackend类,以简化认证后端的自定义。

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

django.contrib.sessions

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

Models

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

2 添加了Sign数据库功能。

3 FilePathField现在接受可调用对象

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

5 Avg和Sum聚合功能现在支持distinct参数,可以去重。

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

7 AutoField、BigAutoField以及 SmallAutoField分别继承了IntegerField、BigIntegerField和SmallIntegerField,所以其系统检查和验证器也相应分别继承。

8 FileField.upload_to现在支持pathlib.Path。

9 CheckConstraint 在MySQL 8.0.16+上被支持。

Django3.0 向后不兼容

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

Django3.0中废弃的一些功能

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

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

Django 3.0中删除的功能

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

1 django.db.backends.postgresql_psycopg2模块
2 django.shortcuts.render_to_response() 方法
3 DEFAULT_CONTENT_TYPE设置
4 HttpRequest.xreadlines() 方法
5 Field.from_db_value()和 Expression.convert_value()方法
6 QuerySet.earliest()和 latest()的field_name关键字参数
7 django.utils.http.cookie_date() 方法
8 staticfiles和admin_static模板标签库
9 django.contrib.staticfiles.templatetags.staticfiles.static() 方法

总结

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

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

你可能感兴趣的:(Django学习专栏)