zoukankan      html  css  js  c++  java
  • Django3.2 新特性

    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

    全局级别配置:

    DEFAULT_AUTO_FIELD = 'django.db.models.AutoField'
    

    app级别配置:

    from django.apps import AppConfig
    
    class MyAppConfig(AppConfig):
        default_auto_field = 'django.db.models.AutoField'
        name = 'my_app'
    

    模型级别指定:

    from django.db import models
    
    class MyModel(models.Model):
        id = models.AutoField(primary_key=True)
    

    函数式索引

    Index()新增 *expressions 位置参数 ,可以为表达式创建函数类型的索引。

    具体方法是在模型的Meta类中添加indexes选项。

    比如:

    from django.db import models
    from django.db.models import F, Index, Value
    from django.db.models.functions import Lower, Upper
    
    
    class MyModel(models.Model):
        first_name = models.CharField(max_length=255)
        last_name = models.CharField(max_length=255)
        height = models.IntegerField()
        weight = models.IntegerField()
    
        class Meta:
            indexes = [
                Index(
                    Lower('first_name'),
                    Upper('last_name').desc(),
                    name='first_last_name_idx',
                ),
                Index(
                    F('height') / (F('weight') + Value(5)),
                    name='calc_idx',
                ),
            ]
    

    支持pymemcache

    新的 django.core.cache.backends.memcached.PyMemcacheCache 缓存后端,支持使用 pymemcache库。但是需要 pymemcache 3.4.0或更高版本

    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时一行一行地处理数据,而不需要一次性将所有数据整体加载。

    总结

    没有什么重要的内容。版本号太激进了。

    更多技术文章请访问: https://www.liujiangblog.com

    更多视频教程请访问: https://www.liujiangblog.com/video

  • 相关阅读:
    Python笔记:高阶函数
    linux C生成UUID的方法
    c语言连接mysql完整演示
    linux下C语言连接mysql数据库演示(在控制台编译的)
    mysql版本问题,导致的mysql.user表下面的字段变成了authentication_string
    选择排序算法
    汉诺塔递归实现
    操作系统复习第一章
    二叉树的基本操作
    字符串的模式匹配算法
  • 原文地址:https://www.cnblogs.com/django-dev/p/14773931.html
Copyright © 2011-2022 走看看