资讯中心 Info
当前位置:爱尚教育 > 资讯中心 >
django3.2 新特性
发布日期:2021-09-19 阅读次数:

2021年4月6日正式发布了Django 3.2!这是一个长支持版本,至少有3年的维护期。

而上一个长支持版本Django2.2将在2022年4月结束支持。

Django 3.2支持Python 3.6, 3.7, 3.8, 3.9或者更高版本。

Django 3.2只支持MySQL 5.7,或更高版本。对于MySQL 5.6的支持在 2021年4月到期。

Django 3.2只支持PostgreSQL 9.6,或更高版本。

自动发现AppConfig

以往,大多数可插拔的app应用中,都在apps.py文件中定义了一个AppConfig类。

大多数人都不知道apps.py的功能和用法,更不知道可以在根目录下的__init__.py中定义一个default_app_config变量指向AppConfig类。这个指向是一个钩子,可以在初始化app的时候,自动调用我们定义的一些代码。

现在,我们不需要这么麻烦了,只要你在任何应用的apps.py文件中定义了一个AppConfig类,Django会自动发现,并调用它,不需要再编写default_app_config变量了,它也被废弃了。

我们也不用纠结在INSTALLED_APPS中写app的名字,还是AppConfig子类名了,因为两者一样。

自动创建的主键的类型发生变化

当你编写一个模型的时候,如果你没有定义一个带有primary_key=True属性的主键字段,Django会帮你自动创建一个,也就是id字段。这个自动创建的字段类型可以通过 DEFAULT_AUTO_FIELDAppConfig.default_auto_field属性进行预定义。

为了向后兼容,Django3.2之前,这个自动创建的主键的类型,默认被设置为AutoField,但是Django3.2之后,官方将它改为 BigAutoField了。

为了防止过去的代码和新版本Django之间的冲突,你可以如下显式地设置,使其依然使用AutoField

 

 

admin后台新增两个装饰器

也就是:

  • @display()装饰器:其功能和list_display 或者readonly_fields一样
  • @action()装饰器:类似原来的actions属性。

在某些场景下,使用装饰器比直接使用属性更方便。

小功能

  • admin后台开始支持外观主题
  • auth的PBKDF2密码哈希迭代次数又提高了,盐的长度也提高到了128位
  • loaddata和dumpdata管理命令现在支持XZ和LZMA格式

  • 现在不需要活动的数据库连接,就可以执行makemigrations命令了。

  • 新增django.core.paginator.Paginator.get_elided_page_range() 方法,允许生成一个页面范围,其中一些值会 被省略。如果你的页面数量比较大,那么这个方法有助于在模板中生成合理数量的页面链接。

  • 新增响应头部属性 HttpResponse.headers,未来用于替代 HttpResponse本身。目前两者共存,作用相同。

  • 对于SECRET_KEY这个settings.py中最重要的安全配置,不再是第一次加载时进行检查,而是在第一次访问时检查。这有助于运行一些不依赖于SECRET_KEY的管理命令。但是在没有提供SECRET_KEY的情况下,调用configure()方法后,如果你发生对settings.SECRET_KEY 的访问,将弹出ImproperlyConfigured异常。

  • 新增JSONL序列化器。用于在dumpdata和loaddata时一行一行地处理数据,而不需要一次性将所有数据整体加载。