Python兼容性
Django 3.0 仅支持Python 3.6, 3.7和3.8,而且仅支持每个系列里的最新版本。而Django 2.2.x是最后的支持Python 3.5的版本。Django官方已经建议第三方应用开发者放弃兼容Django2.2之前的版本,并给出了操作指南。
Django 3.0的新特性支持MariaDB Django现在官方支持MariaDB 10.1及以上版本
2. 支持 ASGI Django 3.0已经完全自持async应用了。并提供了部署异步应用的说明
3. 在PostgreSQL上支持ExclusionConstraint
4. Filter 表达式
5. model field的choices属性现在支持自定义枚举类型
6. 一些小变更:
1. django.contrib.admin ModelAdmin.listdisplay 增加了 adminorderfiled;新的ModelAdmin.get_inlinces()方法支持基于request或者model实例来指定inlines;Select2升级到4.0.7;jQuery升级到3.4.1
2. django.contrib.auth PasswordResetConfirmView添加了reset_url_token属性,可以在reset URL上显示一个token参数;为了支持认证backend的定制,增加了基类 BaseBackend;为了和get_group_permissions()对应,添加了get_user_permissions()方法;在django.contrib.auth.forms的password、username、和email字段上添加了 autocomplate HTML属性,以便更好地和浏览器的密码管理功能交互;当在命令行的非交互模式下,没有提供某些createsuperuser的参数时,将从环境变量读取这些参数; REQUIREDFIELDS现在支持ManyToManyField;新方法 UserManager.with_perm()返回特定权限的用户;PBKDF2密码哈希器迭代次数从15万次增加到18万次。
3. django.contrib.gis 允许MySQL的空间查询函数在只是的空间中操作,之前限制在绑定的盒子上;增加了GeometryDistance函数,支持PostGIS;在Distance上支持长度单位furlong;支持在pathlib.Path上使用GEOIP_PATH;GeoIP2类现在接受 pathlib.Path
4. django.contrib.postgresql
5. django.contrib.sessions 新的get_session_cookie_age()允许动态地获取session的cookie age
6. django.contrib.syndication 添加了 language类属性在django.contrib.syndication.views.Feed上,支持自定义feed的语言。默认值是get_language()而不是之前的LANGUAGE_CODE。
7. cache add_never_cache_headers()和never_cache() 增加了private指令 到 Cache-Control
8. File Storage Storage.get_alternative_name()允许自动以生成文件名的算法,当上传的文件名已经存在的时候
9. Form
10. I18N
11. Logging
非兼容变更Database backend API
django.contrib.admin
django.contrib.gis
不再支持PostgreSQL 9.4,django支持PostgreSQL 9.5及以上版本
不再支持Oracle 12.1,django 3.0支持 Oracle 12.2和18c
移除一些私有的Python 2 兼容的API
移除的特性
以下特性已经到达了最后的维护期限,所以在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()中的context参数被移除
QuerySet.earliest()和latest()的关键字参数field_name 被移除
ForceRHR函数被移除
django.utils.http.cookie_date() 被移除
staticfiles和admin_static模板标签库被移除
django.contrib.staticfiles.templatetags.staticfiles.static()被移除
一般情况下,新发布的版本在随后的较短时间内可能会发布bug的修复版,本人并不建议立刻从Django 2.2升级到3.0,可以再过2-3个月;如果项目还在使用Django 2.0.x,2.1.x,可以先升级到 Django 2.2的最新版。