栏目分类:
子分类:
返回
终身学习网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
终身学习网 > IT > 软件开发 > 后端开发 > Python

Django 4.1 可以做什么?

Python 更新时间:发布时间: 百科书网 趣学号
Django 4.1 可以做什么?

Django4.1 新特点

 

2022 年 8 月 3 日

欢迎来到 Django 4.1!

这些发行说明涵盖了新功能,以及从 Django 4.0 或更早版本升级时需要注意的一些向后不兼容的更改。我们已经 开始了一些功能的弃用过程。

如果您要更新现有项目,请参阅如何将 Django 升级到更新版本指南。

Python 兼容性¶

Django 4.1 支持 Python 3.8、3.9 和 3.10。我们强烈推荐并且仅官方支持每个系列的最新版本。

Django 4.1 的新特性¶

基于类的视图的异步处理程序¶

视图子类现在可以定义异步 HTTP 方法处理程序:

import asyncio
from django.http import HttpResponse
from django.views import View

class AsyncView(View):
    async def get(self, request, *args, **kwargs):
        # Perform view logic using await.
        await asyncio.sleep(1)
        return HttpResponse("Hello async world!")

异步 ORM 接口¶

QuerySet现在为所有数据访问操作提供了一个异步接口。它们按照现有的同步操作命名,但带有a前缀,例如acreate()、aget()等。

新接口允许您编写异步代码,而无需将 ORM 操作包装在sync_to_async():

async for author in Author.objects.filter(name__startswith="A"):
    book = await author.books.afirst()

请注意,在这个阶段,底层数据库操作保持同步,并且正在将异步支持下推到 SQL 编译器中,并集成异步数据库驱动程序。新的异步查询集接口目前 sync_to_async()为您封装了必要的操作,并将允许您的代码随着 ORM 的发展利用异步支持的发展。

约束验证¶

Check、 unique和选项 中exclusion定义 的 约束Meta.constraints现在 在模型 验证期间 被 检查.

表单呈现可访问性¶

为了帮助用户使用屏幕阅读器和其他辅助技术, 此版本提供了新的基于表单模板。这些提供比旧模板更易于访问的导航,并且能够正确地将相关控件(例如单选列表)分组到字段集中。

推荐使用新模板,它将成为从 Django 5.0 输出表单(如在模板中)时的默认表单呈现样式。{{ form }}

为了便于采用新的输出样式,默认表单和表单集模板现在可以通过 FORM_RENDERER设置在项目级别进行配置。

CSRF_COOKIE_MASKED setting¶

新的CSRF_COOKIE_MASKED过渡设置允许指定是否屏蔽 CSRF cookie。

CsrfViewMiddleware不再像 DOM 中的 CSRF 令牌那样屏蔽 CSRF cookie。如果要将同一项目的多个实例升级到 Django 4.1,则应在转换期间设置 CSRF_COOKIE_MASKED为True,以便与旧版本的 Django 兼容。一旦过渡到 4.1 完成,您就可以停止覆盖 CSRF_COOKIE_MASKED.

此设置在此版本中已弃用,并将在 Django 5.0 中删除。

次要功能¶

django.contrib.admin¶

  • 管理员暗模式 CSS 变量现在应用在单独的样式表和模板块中。
  • 提供自定义子类的ModelAdmin 列表过滤器FieldListFilter 现在可以在使用查找过滤多个值时控制查询字符串值分隔符__in。
  • 管理员 现在已分页。history view
  • 相关的小部件包装器现在具有指向对象更改表单的链接。
  • 该AdminSite.get_app_list()方法现在允许更改管理索引页面上的应用程序和模型的顺序。

django.contrib.auth¶

  • PBKDF2 密码哈希的默认迭代次数从 320,000 增加到 390,000。
  • 该RemoteUserBackend.configure_user()方法现在允许将用户属性与远程系统(例如 LDAP 目录)中的属性同步。

django.contrib.gis¶

  • 新GEOSGeometry.make_valid()方法允许将无效几何转换为有效几何。
  • 的新clone参数GEOSGeometry.normalize()允许创建几何的标准化克隆。

django.contrib.postgres¶

  • 新的BitXor() 聚合函数返回所有非空输入值int的按位。XOR
  • SpGistIndex现在支持在 PostgreSQL 14+ 上覆盖索引。
  • ExclusionConstraint现在支持在 PostgreSQL 14+ 上使用 SP-GiST 索引覆盖排除约束。
  • and 的新default_bounds属性允许为列表和元组输入指定边界。DateTimeRangeFieldDecimalRangeField
  • ExclusionConstraint现在允许使用 OpClass()表达式指定运算符类。

django.contrib.sitemaps¶

  • 默认站点地图索引模板现在 通过新 get_latest_lastmod()方法包括可用的时间戳。应针对调整后的上下文变量更新自定义站点地图索引模板。

django.contrib.staticfiles¶

  • ManifestStaticFilesStorage现在用它们的散列对应物替换 CSS 源映射引用的路径。

数据库后端¶

  • 第三方数据库后端现在可以使用DatabaseFeatures.minimum_database_version 元组属性(例如,表示“10.0”)指定数据库的最低要求版本。如果指定了最低版本,后端还必须实现 ,它返回当前数据库版本的元组。必须调用后端的 方法才能运行检查。(10, 0)DatabaseWrapper.get_database_version()DatabaseWrapper.init_connection_state()super()

Forms¶

  • 用于在转换为字符串时呈现表单的默认模板,例如在模板中,现在可以通过设置为 提供的类在项目级别进行配置。{{ form }}form_template_nameFORM_RENDERER

    Form.template_name现在是延迟到渲染器的属性,但可以用字符串值覆盖以指定每个表单类的模板名称。

    类似地,用于渲染表单集的默认模板可以通过匹配的 formset_template_name渲染器属性来指定。

  • 新的div.html表单模板、引用 Form.template_name_div属性和匹配Form.as_div() 方法使用 HTML元素呈现表单。

    建议使用这种新的输出样式而不是现有的 as_table(),as_p()和as_ul()样式,因为模板实现

    对相关输入进行分组,并且屏幕阅读器用户更容易导航。

    基于 div 的输出将成为 Django 5.0 的默认渲染样式。

  • 为了顺利采用新的输出样式,提供了两个过渡表单渲染器类: django.forms.renderers.DjangoDivFormRenderer和 django.forms.renderers.Jinja2DivFormRenderer,分别用于 Django 和 Jinja2 模板后端。

  • 例如:

    FORM_RENDERER = "django.forms.renderers.DjangoDivFormRenderer"
    

    一旦输出样式是默认的,从 Django 5.0 开始,这些过渡渲染器将被弃用,以便在 Django 6.0 中删除。FORM_RENDERER那时可以删除该 声明。

  • 如果新的输出样式不适合您的项目,您应该定义一个渲染器子类来指定 您所需的样式,并进行form_template_name相应 的设置。formset_template_nameFORM_RENDERER

    例如,对于 使用的

    输出样式as_p(),您可以将表单渲染器设置定义form_template_name为 "django/forms/p.html"和formset_template_nameto "django/forms/formsets/p.html"。

  • 新的允许通过新的参数 legend_tag()在标签中呈现字段标签。taglabel_tag()

  • 和 允许阻止新对象创建的新edit_only参数。modelformset_factory()inlineformset_factory()

  • Media的js和cssclass 属性 现在允许使用可散列对象,而不仅仅是路径字符串,只要这些对象实现该方法(通常在使用装饰器装饰时)。__html__()html_safe()

  • 新的BoundField.use_fieldset和Widget.use_fieldset 属性有助于识别其输入应分组在 a 

    和 a中的小部件

  • error_messages参数 现在允许通过传递 和键BaseFormSet为无效数量的表单自定义错误消息。'too_few_forms''too_many_forms'

  • IntegerField, FloatField, DecimalField现在可以选择接受一个step_size 参数。这用于设置stepHTML 属性,并在表单提交时进行验证。

Internationalization¶

  • 该i18n_patterns()功能现在支持具有脚本和区域的语言。

管理命令¶

  • makemigrations --no-input现在记录默认答案和无法创建迁移的原因。
  • 新选项将日志输出和输入提示转移到,仅将生成的迁移文件的路径写入到.makemigrations --scriptablestderrstdout
  • 新选项允许从表中删除不存在的迁移。migrate --prunedjango_migrations
  • startproject由, startapp, optimizemigration,makemigrations和 创建的 Python 文件squashmigrations现在使用该black命令进行格式化,如果它存在于您的PATH.
  • 新optimizemigration命令允许优化迁移操作。

Migrations¶

  • 新操作允许重命名在or 选项RenameIndex中定义的索引 。Meta.indexesindex_together
  • 迁移自动检测器现在 RenameIndex在 RemoveIndex重AddIndex命名 Meta.indexes.
  • RenameIndex在将中 定义AlterIndexTogether的AddIndex索引 移动 Meta.index_together到 Meta.indexes.

Models¶

  • 表达式的order_by参数 Window现在接受对字段和转换的字符串引用。
  • 新设置允许对持久数据库连接CONN_HEALTH_CHECKS启用健康检查, 以减少失败请求的数量,例如在数据库服务器重新启动后。
  • QuerySet.bulk_create()现在支持在行插入失败唯一性约束时更新字段。这在 MariaDB、MySQL、PostgreSQL 和 SQLite 3.24+ 上受支持。
  • QuerySet.iterator()现在只要chunk_size提供参数就支持预取相关对象。在旧版本中,没有进行预取。
  • Q对象和查询集现在可以使用 ^互斥或​​ ( XOR) 运算符进行组合。XORMariaDB 和 MySQL 原生支持。对于不支持的数据库,将使用、和XOR将查询转换为等效的。ANDORNOT
  • 新的Field.non_db_attrs属性允许自定义不影响列定义的字段属性。
  • 在 PostgreSQL 上,、、AutoField和BigAutoField现在SmallAutoField被创建为标识列,而不是带有序列的串行列。

请求和响应¶

  • HttpResponse.set_cookie()现在支持参数timedelta 的对象max_age。

Security¶

  • 新SECRET_KEY_FALLBACKS设置允许为密钥轮换提供值列表。
  • 该SECURE_PROXY_SSL_HEADER设置现在支持在标头值中使用逗号分隔的协议列表。

Signals¶

  • 和信号pre_delete现在 post_delete调度 origin删除。

Templates¶

  • 包装模板过滤器时不再需要HTML