目录

RuntimeWarning:DateTimeField Session.expire_date received a naive datetime

前景

Django部署的web应用报警,内容如下:

1
"RuntimeWarning:DateTimeField Session.expire_date received a naive datetime"

原因:

1
2
3
4
这是一个跟时区有关的问题,错误里说到datetime字段得到一个naive datetime,而不是支持time zone的active datetime
由于USE_TZ设置为True,Django会自动根据所设的时区对时间进行转换
程序中和数据保存的时间都转UTC时间,只有模版渲染时会把时间转为TIME_ZONE所设置的时区的时间
使用datetime.datetime.utcnow()输出的是不带时区的utc时间,称为naive time

解决

1
2
3
4
5
6
7
from django.utils import timezone

#方法1
#datetime.now()   修改为-->    timezone.now()

#方法2
#datetime.now()   修改为-->    datetime.datetime.now(tz=timezone.utc)