Django 3.1支持Python 3.6、3.7和3.8。 我们强烈建议并且仅正式支持每个系列的最新版本。
异步视图和中间件支持
Django现在支持完全异步的请求路径,包括:
要开始使用异步视图,您需要使用async def声明一个视图:
async def my_view(request):
await asyncio.sleep(0.5)
return HttpResponse('Hello, async world!')
无论您是在WSGI还是ASGI模式下运行,都支持所有异步功能。但是,在WSGI模式下使用异步代码会导致性能下降。您可以在异步支持文档中阅读有关特定内容的更多信息。
您可以随意混合使用异步和同步视图,中间件和测试。 Django将确保您始终拥有正确的执行上下文。我们希望大多数项目将大多数视图保持同步,并且只有少数几个在异步模式下运行-但这完全是您的选择。
Django的ORM,缓存层和其他长时间运行网络调用的代码尚不支持异步访问。我们希望在即将发布的版本中增加对它们的支持。异步视图是理想的选择,但是,如果您要在视图中进行大量API或HTTP调用,则现在可以并行执行所有这些HTTP调用,从而显着加快视图的执行速度。
异步支持应该完全向后兼容,并且我们已尝试确保对现有的同步代码不进行速度退化。它对任何现有的Django项目都没有明显的影响。
Django现在包括models.JSONField和forms.JSONField,可在所有受支持的数据库后端上使用。 这两个字段都支持使用自定义JSON编码器和解码器。 model字段支持以前仅适用于PostgreSQL的自省,查找和转换:
from django.db import models
class ContactInfo(models.Model):
data = models.JSONField()
ContactInfo.objects.create(data={
'name': 'John',
'cities': ['London', 'Cambridge'],
'pets': {'dogs': ['Rufus', 'Meg']},
})
ContactInfo.objects.filter(
data__name='John',
data__pets__has_key='dogs',
data__cities__contains='London',
).delete()
如果您的项目使用django.contrib.postgres.fields.JSONField以及相关的表单字段和转换,则应进行调整以使用新字段,并生成并应用数据库迁移。 目前,旧的字段和转换保留为对新字段和转换的引用,在此版本中已弃用。
新的DEFAULT_HASHING_ALGORITHM过渡设置允许指定默认的哈希算法,用于编码cookie,管理站点中的密码重置令牌,用户会话以及django.core.signing.Signer和django.core.signing.dumps()创建的签名。
在Django 3.1中添加了对SHA-256的支持。 如果要将同一项目的多个实例升级到Django 3.1,则应在过渡期间将DEFAULT_HASHING_ALGORITHM设置为“ sha1”,以允许与Django的较早版本兼容。 到3.1的转换完成后,您可以停止覆盖DEFAULT_HASHING_ALGORITHM。
此设置在此版本中已弃用,因为在Django 4.0中将删除对使用SHA-1算法的令牌,cookie,会话和签名的支持。
数据库后端API
本节描述了第三方数据库后端中可能需要的更改。
对MariaDB 10.1的上游支持将于2020年10月结束。Django3.1支持MariaDB 10.2和更高版本。
管理员不再支持旧版Internet Explorer浏览器。 有关支持的浏览器的详细信息,请参见管理员常见问题解答。
包括django.contrib.auth.models.User.first_name的迁移。 如果您的自定义用户模型继承自AbstractUser,则需要为该用户模型生成并应用数据库迁移。
如果要保留名字的30个字符限制,请使用自定义格式:
from django import forms
from django.contrib.auth.forms import UserChangeForm
class MyUserChangeForm(UserChangeForm):
first_name = forms.CharField(max_length=30, required=False)
如果您希望在编辑用户时在管理员中保留此限制,请设置UserAdmin.form以使用此表单:
from django.contrib.auth.admin import UserAdmin
from django.contrib.auth.models import User
class MyUserAdmin(UserAdmin):
form = MyUserChangeForm
admin.site.unregister(User)
admin.site.register(User, MyUserAdmin)
PostgreSQLJSONField
这些功能已到弃用周期的末端,并已在Django 3.1中删除。
有关这些更改的详细信息,请参阅2.2中不推荐使用的功能,包括如何删除对这些功能的使用。