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

编程技术圈

共 2072字,需浏览 5分钟

 ·

2020-08-14 20:22

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



全面转向pathlib

从3.1后,Django将广泛使用pathlib来处理文件路径,而不是os.path模块。settings.py中使用startproject命令生成的根目录将使用 pathlib.PathSTATICFILES_DIRS和FileSystemStorage也将支持pathlib.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 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的变化,你最喜欢哪个呢? 

浏览 22
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报