• Django3.1 版本说明


    Django 3.1 于2020年8月4日发布,支持Python 3.6、3.7、3.8或更高版本。

    支持异步视图和中间件

    从3.1开始,Django支持请求过程的全异步,包括:

    • 异步的视图
    • 异步的中间件
    • 异步的测试和客户端

    要编写一个异步视图很简单,只需要用async关键字:

    import datetime
    from django.http import HttpResponse
    
    async def current_datetime(request):
        now = datetime.datetime.now()
        html = '<html><body>It is now %s. from https://www.liujiangblog.com</body></html>' % now
        return HttpResponse(html)
    

    或者如下面的例子:

    async def my_view(request):
        await asyncio.sleep(0.5)
        return HttpResponse('Hello, async world!')
    

    注意:

    • 异步功能同时支持WSGI和ASGI模式

    • 在WSGI模式下,使用异步功能会有性能损失

    • 可以混用异步/同步视图或中间件,Django会自动处理其中的上下文

    • 建议主要使用同步模式,在有需求的场景才使用异步功能。

    • Django的ORM系统、缓存层和其它的一些需要进行长时间网络/IO调用的代码依然不支持异步访问,在未来的版本中将逐步支持。

    • 异步功能不会影响同步代码的执行速度,也不会对已有项目产生明显的影响。

    新增JSONField类型

    Django3.1新增了models.JSONFieldforms.JSONField两种字段类型,也就是字面上的JSON数据类型,可用于所有支持的数据库后端,并且可以自定义编码器和解码器。

    class ContactInfo(models.Model):
        data = models.JSONField()
    
    # ORM的API范例
    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()
    

    这个字段类型支持一些先前只有PostgresSQL支持的高级查询用法,如上例所示。

    first_name长度增加

    auth框架中AbstractUser模型的first_name字段最大长度增至150。Django为此特别增加了一个迁移文件。

    如果你现有的项目中继承了这个模型,那么当你从旧的Django版本升级到3.1,你需要手动生成迁移文件并执行迁移操作。

    如果你依然想保持长度为30的限制,可以自定义表单。

    首先继承原有表单,并重写first_name字段。

    from django import forms
    from django.contrib.auth.forms import UserChangeForm
    
    class MyUserChangeForm(UserChangeForm):
        first_name = forms.CharField(max_length=30, required=False)
    

    在需要输入first_name的页面处使用MyUserChangeForm,比如admin的页面:

    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)
    

    一些小改动

    • admin中新增django.contrib.admin.EmptyFieldListFilter过滤器用于对空的字段进行过滤
    • auth中PBKDF2 算法的迭代次数从180000增加到216000
    • auth中新增 PASSWORD_RESET_TIMEOUT配置项,用于自定义密码重置链接的生存周期秒数,用以替代即将在Django4.0中废弃的PASSWORD_RESET_TIMEOUT_DAYS配置项。
    • auth中很多地方开始使用SHA-256算法
    • django.contrib.humanize人性化中的intword模板过滤器现在支持负整数
    • STATICFILES_DIRSEMAIL_FILE_PATH配置项现在支持pathlib.Path
    • django.forms.DateTimeField现在支持新的时间格式,例如 2019-10-10T06:472019-10-10T06:47:23+04:00或者2019-10-10T06:47:23Z
    • 现在,如果ALLOW_HOSTS列表为空并且DEBUG=True,那么localhost的子域名可用,例如static.localhost
    • include模板标签现在可以迭代模板名
    • admin后台界面不再支持旧的IE浏览器
    • MariaDB最低需求10.2版本
  • 相关阅读:
    【java/jdbc】求Oracle表中字符串类型、Data类型、TimeStamp类型字段的时间差(时分秒hms形式)
    转贴【Oracle.DBA】Oracle temp表空间爆满的处理方法
    【Oracle/sqlplus】利用Spool批量删除系统中的表
    在Win/Linux如何连续跟踪应用的CPU和内存使用率
    【Java.异常】记一次一千三百万记录的表迁移时发生的异常Java.sql.SQLException,关闭的ResultSet;findColumn
    jdbc连postgresql库时schema设置
    2ESP8266转CAN总线和RS232通讯模块CAN总线通信测试Arduino
    21物联网开发终端管理篇安装PHP,测试GET,POST接口(.Windows系统)
    11物联网开发终端管理篇java从MQTT获取设备数据,并通过Druid连接池把数据写入MySQL数据库(Linux系统,宝塔)
    001STM32+MN316(NBIOT)基本控制篇(阿里云物联网平台)C#,网页,android,微信小程序,单片机等使用MQTT接入阿里云物联网平台
  • 原文地址:https://www.cnblogs.com/django-dev/p/13463104.html
Copyright © 2020-2023  润新知