专业编程教程与实战项目分享平台

网站首页 > 技术文章 正文

Django 3.1正式发布

ins518 2024-09-17 21:49:12 技术文章 24 ℃ 0 评论



Python兼容性

Django 3.1支持Python 3.6、3.7和3.8。 我们强烈建议并且仅正式支持每个系列的最新版本。

Django 3.1的新功能

异步视图和中间件支持

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项目都没有明显的影响。

所有支持的数据库后端的JSONField

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设置

新的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,会话和签名的支持。

次要改动——涉及的类(详细参阅https://docs.djangoproject.com/en/3.1/releases/3.1/#forms)

  • django.contrib.admin
  • django.contrib.auth
  • django.contrib.contenttypes
  • django.contrib.gis
  • django.contrib.humanize
  • django.contrib.postgres
  • django.contrib.sessions
  • django.contrib.staticfiles
  • Cache
  • CSRF
  • Email
  • Error Reporting
  • File Storage
  • Forms
  • Internationalization
  • Management Commands
  • Models
  • Pagination
  • Requests and Responses
  • Security
  • Templates
  • Tests
  • URLs
  • Utilities
  • Miscellaneous

3.1中向后不兼容的更改

数据库后端API

本节描述了第三方数据库后端中可能需要的更改。

不再支持MariaDB10.1

对MariaDB 10.1的上游支持将于2020年10月结束。Django3.1支持MariaDB 10.2和更高版本。

contrib.admin浏览器支持

管理员不再支持旧版Internet Explorer浏览器。 有关支持的浏览器的详细信息,请参见管理员常见问题解答。

AbstractUser.first_name max_length增加到150

包括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)

3.1中已弃用的功能

PostgreSQLJSONField

3.1中删除的功能

这些功能已到弃用周期的末端,并已在Django 3.1中删除。

有关这些更改的详细信息,请参阅2.2中不推荐使用的功能,包括如何删除对这些功能的使用。

更详细的信息请查阅 https://docs.djangoproject.com/en/3.1/releases/3.1/#forms

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表