django pytz在Python中是现在还是将来被弃用?

uplii1fm  于 2023-07-01  发布在  Go
关注(0)|答案(1)|浏览(208)

pytz用于Django版本:<=3.2 doc选择当前时区,如下所示:

import pytz # Here

from django.utils import timezone

class TimezoneMiddleware:
    def __init__(self, get_response):
        self.get_response = get_response

    def __call__(self, request):
        tzname = request.session.get('django_timezone')
        if tzname:
            timezone.activate(pytz.timezone(tzname))
        else:
            timezone.deactivate()
        return self.get_response(request)

但是,在Django版本中使用了zoneinfo而不是pytz:4.0<= doc选择当前时区,如下所示:

import zoneinfo # Here

from django.utils import timezone

class TimezoneMiddleware:
    def __init__(self, get_response):
        self.get_response = get_response

    def __call__(self, request):
        tzname = request.session.get('django_timezone')
        if tzname:
            timezone.activate(zoneinfo.ZoneInfo(tzname))
        else:
            timezone.deactivate()
        return self.get_response(request)

我的问题:

  1. pytz在Python中是现在还是将来被弃用?
    1.为什么pytz没有在Django版本中使用:4.0<= doc选择当前时区?
gzszwxb4

gzszwxb41#

引用pytz的README:
此项目处于维护模式。使用Python 3.9或更高版本的项目最好使用时区功能,现在包含在核心Python和与它一起工作的包中,如tzdata。
没有使用字面上的“deprecated”,包维护者建议您不要在新项目中使用pytz,所以这实际上是出于所有意图和目的的弃用。
因此Django的策略与此一致,事实上Django更进一步,促进了Python 3.8(仍然支持的最旧Python版本)中zoneinfo的使用。从你引用的Django 4.0文档中:
时区支持使用zoneinfo,它是Python 3.9的Python标准库的一部分。如果你使用的是Python 3.8,backports.zoneinfo包会自动安装在Django旁边。

在Django 4.0中更改:zoneinfo是默认的时区实现。您可以通过USE_DEPRECATED_PYTZ设置在4.x发布周期中继续使用pytz

相关问题