最近两年,Django的版本号提升得特别快,2.0还没有多久,很快就要到3.0了。
Django 高级实战编程
视频分享地址: https://study.163.com/course/introduction/1209407824.htm?share=2&shareId=400000000535031
使用上面的链接地址进入,联系QQ 1064468942 可获得 部分 学费退还 喔, 实际支出 将少于 所标识的价格
Django高级实战课程源代码与资源包
源代码分为两部分,两个网站的源代码都是按照开发进度按章保存的:
新闻博客问答聊天网站的源代码:
链接:https://pan.baidu.com/s/1cd7HU46ovf_N6foIYpueFA
最终部署版本 链接:https://pan.baidu.com/s/1lFjwT-ygYynHvEgUufWUEQ
乐乎在线阅读网的源代码:
链接:https://pan.baidu.com/s/10WbOVte0PMiIStQEQC4nVQ
网盘提取码请查看相关视频
路线图和时间表
让我们先看看官方的路线图和时间表:
可以看到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
- 为
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
字段允许使用对称的中间表 -
Avg
和Sum
聚合功能现在支持distinct
参数,可以去重。 -
新增
SmallAutoField
字段,类似AutoField
字段,区别在于前者只允许一个较小的值范围,比如从1到32767,这样会更安全一点。 -
AutoField
、BigAutoField
以及SmallAutoField
分别继承了IntegerField
、BigIntegerField
和SmallIntegerField
,所以其系统检查和验证器也相应分别继承。 -
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()
方法 -
staticfiles
和admin_static
模板标签库 -
django.contrib.staticfiles.templatetags.staticfiles.static()
方法
总结
从版本说明中我们可以看出,Django3.0最核心的变化是支持基于ASGI的异步通信,其它细微的改动一般用户基本感受不出来。
异步通信的功能据说是将django-channle
这个外部库纳入进来,作为Django官方核心标准功能之一。无论如何,HTML5的websocket将可以直接和Django进行通信了。基于Django实现网页聊天室、网页QQ、网页微信等实时通信应用将变得简单,我们可以和长短轮询说再见了。