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)
我的问题:
pytz
在Python中是现在还是将来被弃用?
1.为什么pytz
没有在Django版本中使用:4.0<= doc选择当前时区?
1条答案
按热度按时间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
。