Django 3.2正式发布! 附中文文档链接地址!

就在昨晚,Django 3.2正式发布了! 这将是Django 3系列的最后一个稳定版本,扩展支持会一直延续到2024年。同时官宣对Django 2.2的支持将到明年4月份结束。对于学习Django和使用Django开发新项目的同学而言,还是直接上Django 3.2吧。偷偷打个广告,大江狗的技术博客(https://pythondjango.cn)上Django相关教程会按最新Django 3.2版本更新哦。

中文文档地址如下所示:

https://docs.djangoproject.com/zh-hans/3.2/

回到正题,那么Django 3.2到底有哪些主要变化呢? 

Django 3.2正式发布! 附中文文档链接地址!_第1张图片

Python版本兼容性

Django 3.2支持Python 3.6, 3.7, 3.8和3.9。升级Django版本的同志们别忘了也升级下Python版本。

相关阅读

Django基础(40): 如何正确升级Django版本

AppConfig自动发现

Django 3.2之前,如果你对一个app修改了相应配置,应该将app1.apps.App1Config类加入到INSTALLED_APP中去,而不是直接添加app名。Django 3.2支持AppConfig名自动发现,这也就意味着如果不管你以后是否修改一个app的配置,你以后只需要在INSTALLED_APP中添加app名即可。

相关阅读

Django的INSTALLED_APPS中应该写app名,还是AppConfig子类?

定制自动创建主键类型

当你定义一个模型的时候,如果你没有使用primary_key=True指定一个主键,Django会自动为你创建一个主键。Django 3.2之前默认使用的自增主键AutoField, Django 3.2及以后将会默认使用BigAutoField。如果你想依然使用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'

新增函数索引

这条非常有用。对于频繁查询的字段,建议在模型的Meta选项里定义indexes索引。Django 3.2将支持使用函数表达式创建索引。

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',
            ),
        ]

相关阅读

Django 与数据库交互,你需要知道的 9 个技巧

Django基础(39): 如何给数据库添加约束(Constraints)

Admin新增@display和@actions两个装饰器

在Django 3.2之前,如果你要在admin中自定义display选项,你可以通过点号. 设置排序字段及简短描述。

def is_published(self, obj):
    return obj.publish_date is not None
is_published.boolean = True
is_published.admin_order_field = '-publish_date'
is_published.short_description = 'Is Published?'

在Django 3.2以后,你可以使用@display装饰器添加描述。

@admin.display(
    boolean=True,
    ordering='-publish_date',
    description='Is Published?',
)
def is_published(self, obj):
    return obj.publish_date is not None

在Django 3.2之前,如果你要在admin中自定义actions,你可以通过点号. 设置所需的权限及简单描述。

def make_published(self, request, queryset):
    queryset.update(status='p')
make_published.allowed_permissions = ['publish']
make_published.short_description = 'Mark selected stories as published'

在Django 3.2中,你可以直接通过@action装饰器来给你的自定义action添加权限和描述。

@admin.action(
    permissions=['publish'],
    description='Mark selected stories as published',
)
def make_published(self, request, queryset):
    queryset.update(status='p')

相关阅读

Django进阶(1): admin后台高级玩法(多图)

智能分页

Django 3.2之前的Paginator类将连续输出所有页码,非常不智能。Django 3.2新增get_elided_page_range方法。

Paginator.get_elided_page_range(number, *, on_each_side=3, on_ends=2)¶

使用该方法将输出如下页码范围,更容易使用。

[1, 2, '…', 7, 8, 9, 10, 11, 12, 13, '…', 49, 50]

相关阅读

Django 1.X和2.0下利用自带分页Paginator类实现分页功能

其它微小变化

  • 新增对pymemcache的支持

  • autocompletefields支持limited_choices_to选项

  • 新增 no_append_slash装饰器

  • 工具部分新增django.utils.timesince.timesince()和django.utils.timesince.timeuntil(),用于计算与当前时间差。

江哥点评

可惜Django 3.2在异步上还是没有更近一步的突破,这块变化只能等到Django 4以后了。真心希望Django以后越来越好!

大江狗

2021.4

相关阅读

是时候试试Django 3.1新的异步视图功能了

Django 3.1版本正式发布,主要变化有哪些?

Django 3.2正式发布! 附中文文档链接地址!_第2张图片

你可能感兴趣的:(python,mysql,django,人工智能,数据库)