Django 3.1版本正式发布,主要变化有哪些?_大江狗的博客-程序员秘密

技术标签: python  django  mysql  数据库  大数据  

Django 3.1版本已于8月4日正式发布了,里面又有不少激动人心的变化,让Django变得更强大了。小编我今天就带大家看看有哪些主要变化吧?

Python版本兼容性

Django 3.1支持Python 3.6, 3.7和3.8版本。官网建议更新到最新版本。

对异步请求视图和中间件的支持

从3.1起,Django将提供支持完整的异步请求(request),包括:

  • Asynchronous views (异步视图)

  • Asynchronous middleware (异步中间件)

  • Asynchronous tests and test client (异步测试和测试客户端)

如果你希望使用异步视图,需要先使用 async def声明,如下所示:

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

无论你是在 WSGI 或 ASGI 模式下运行,Django都支持所有异步功能,不过在 WSGI 模式下使用异步代码将会有些性能上的损失。

你还可以随意混合使用异步和同步视图,中间件和测试。异步功能不会影响同步代码的执行速度,也不会对已有项目产生明显的影响。

Django的ORM,缓存层和其他长时间运行网络调用的代码尚不支持异步访问。我们希望在即将发布的版本中增加对它们的支持。异步视图是理想的选择,但是,如果您在视图内进行大量的API或HTTP调用,则现在可以本地并行执行所有这些HTTP调用,以大大加快视图的执行速度。

小编注:一般建议使用同步视图函数,只有在有需要的情况下使用异步视图。小编后面会分享具体案例,欢迎关注。

新增JSONField,支持更多数据库作为后端

Django现在新增models.JSONField, forms.JSONField并且支持在更多数据库上运行。这两个字段都支持使用自定义JSON编码器和解码器。以前json格式的数据仅适用于PostgreSQL数据库。

存储的json格式的数据可以使用Django的ORM语法进行链式查询,如下所示:

from django.db import models


class ContactInfo(models.Model):
    data = models.JSONField()


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()

更多阅读:

Django ORM中原生JSONField的使用方法


全面转向pathlib

从3.1后,Django将广泛使用pathlib来处理文件路径,而不是os.path模块。settings.py中使用startproject命令生成的根目录将使用 pathlib.Path。STATICFILES_DIRS和FileSystemStorage也将支持pathlib.Path。

更多阅读:

为什么你要在Django项目中开始使用pathlib而不是os.path处理拼接文件路径


国际化

从3.1后,模板中负责标记需要翻译字符串的标签{% trans %}和{% blocktrans %}将分别被更名为{% translate %}和{% blocktranslate %}。不过短期内较早的trans 和blocktrans模板标签依然可以使用。

<title>{% translate "This is the title." %}</title>
<title>{% translate myvar %}</title>


{% blocktranslate %}
This string will have {
    { value }} inside.
{% endblocktranslate %}

更多阅读

Django基础(38): 如何设置支持多语种网站及国际化

其它小变化

  • Django admin新增空白过滤器django.contrib.admin.EmptyFieldListFilter,并在大屏幕上多了侧边导航

  • settings.py新增PASSWORD_RESET_TIMEOUT 选项,可以密码重置链接有效期(以秒计算),将替代PASSWORD_RESET_TIMEOUT_DAYS

  • django.contrib.humanize模块intword可以支持负数

  • AbstractUser的first_name的最大长度由30变到150个字符

Django 3.1的变化,你最喜欢哪个呢? 欢迎留言。

大江狗

2020.8

如果你订阅公众号过多,为了第一时间能阅读我们的原创技术干货,请一定解读加关注并设为星标。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_42134789/article/details/107925511

智能推荐

SpringBoot学习总结(1)之SpringBoot入门篇_技术路上的苦行僧的博客-程序员秘密

一、SpringBoot概述Spring 框架对于很多 Java 开发人员来说都不陌生。自从 2002 年发布以来,Spring 框架已经成为企业应用开发领域非常流行的基础框架。有大量的企业应用基于 Spring 框架来开发。Spring 框架包含几十个不同的子项目,涵盖应用开发的不同方面。如此多的子项目和组件,一方面方便了开发人员的使用,另外一个方面也带来了使用方面的问题。每个子项目都有一定...

mtk8385 android9 root程序修改_mtk8385的rom_小猿东哥的博客-程序员秘密

diff --git a/frameworks/base/core/jni/com_android_internal_os_Zygote.cpp b/frameworks/base/core/jni/com_android_internal_os_Zygote.cppindex 614d46b..d410776 100644--- a/frameworks/base/core/jni/com_android_internal_os_Zygote.cpp+++ b/frameworks/base/co.

gradle查看解决依赖问题-记录Butterknife8.5.1_2Tu的博客-程序员秘密

support-v4、appcompat-v7、NineOldAndroids 被广泛使用,于是很容易被多次引用导致冲突。记录 Butterknife 8.5.1 引用冲突解决

正则校验的应用--版本号校验,数字千分位转换_正则校验 千分位_zcl_1的博客-程序员秘密

1、校验输入版本号的格式(1-2位数字、1-2个小数点):11.21.31或11.22或1.22或1.2.31const reg = /^\d{1,3}.\d{1,3}(.\d{1,3})?$/;if ((this.target_version != "") &amp; !reg.test(this.target_version)) { return "请输入正确的实验上线版本,支持的版本号格式为“数字.数字”、“数字.数字.数字”";}2、将数字转换为千分位格式:可以直接用toLocal

oracle plsql变量_weixin_33852020的博客-程序员秘密

第一类:PL/SQL变量(在DECLARE阶段被声明和初始化)(*每一行只声明一个变量)(在执行阶段被赋予新值)(可以在PL/SQL之间传递值)(通过标准输出包可以看到结果)变量初始化和关键字:identifier[CONSTANT]datatype[NOTNULL][:=|DEFAULTexpr];[CONSTANT]必须初始化,并且其值不能改变[NOT...

随便推点

java定时任务中java.lang.IllegalStateException: No thread-bound request found_Systemd的博客-程序员秘密

问题描述:xxljob定时任务中写了一个线程池,每次调用定时任务,都会起7条线程,进行数据传输,程序运行时报错:java.lang.IllegalStateException: No thread-bound request found: Are you referring to request attribubug原因:线程池中的子线程获取不到定时任务主线程的request信息解决方法:在定义线程池之前加入两行代码,设置request子线程共享// 子线程request共享ServletRe

计算机科学与技术认知实验报告,大学计算机实验报告范例_weixin_39719749的博客-程序员秘密

一、实验题目文件和文件夹的管理二、实验目的1.熟悉Windows XP的文件系统。2.掌握资源管理器的使用方法。3.熟练掌握在Windows XP资源管理器下,对文件(夹)的选择、新建、移动、复制、删除、重命名的操作方法。三、实验内容1.启动资源管理器并利用资源管理器浏览文件。2.在D盘创建文件夹3.在所创建文件夹中创建Word文件。4.对所创建文件或文件夹执行复制、移动、重命名、删除、恢复、创建...

window下的虚拟机linux系统,windows系统ping不通linux下的ip,但是linux系统可以ping通windows下的ip_haors的博客-程序员秘密

情景:今天本来是在linux下装tomcat服务器,然后访问tomcat的欢迎页,在linux下可以正常访问,localhost:端口或者linux的ip:端口,都可以进入,但是,我想在windows下访问linux的ip:端口,也访问tomcat的主页(欢迎页),但是竟然打不开。。。。刚开始以为是linux的防火墙没有关闭,然后在度度上搜索各种方法,把linux的防火墙关闭。然后,,,然后,我就

Unity API常用方法和类(一)_unity如何创建和使用通用方法和类_weixin_46357026的博客-程序员秘密

课程前言基础file-&gt;bulid setting :设置平台manual手册官方教程scripting api文档事件函数fixedTime:游戏运行一共占用的时间frameCount:帧数realtimeSinceStartup:游戏从开始到现在一直占用的时间,游戏暂停的话会继续开始计时smoothDeltaTimetimeSinceLevelLoad:游戏运行一共占用...

架构设计——架构知识体系_weixin_34413103的博客-程序员秘密

1、什么是架构和架构本质在软件行业,对于什么是架构,都有很多的争论,每个人都有自己的理解。 此君说的架构和彼君理解的架构未必是一回事。我们主要针对互联网服server系统(类似网站)来定义架构:架构是系统的骨架,支撑和链接各个部分,包括组件、连接件、约束规范,以及指导这些内容设计与演化的原理。组件:类似应用服务,独立模块、数据库、nginx等等、连接件:分布式调用、进程间调用、调用...

CentOS 部署Subversion + Apache版本控制服务器_「已注销」的博客-程序员秘密

安装前提安装步骤配置subversion一、安装前提 1.关闭防火墙# service iptables stop# chkconfig iptables off# service ip6tables stop# chkconfig ip6tables off 2.关闭SElinux# perl -i -p -e 's/=enf...

推荐文章

热门文章

相关标签