Django settings USE_TZ, TIME_ZONE and django rest framework



在 Django 教程中,有一句话描述如下。

TIME_ZONE

当USE_TZ为 False 时,这是 Django 将存储的时区 所有日期时间。当USE_TZ为 True 时,这是默认时区 Django 将用于在模板中显示日期时间并解释 在表单中输入的日期时间。

当 django rest 框架从请求中获取朴素的日期时间数据时。那么 Django 会解释这个朴素的日期时间来了解TIME_ZONE设置的本地日期时间吗?如果它是正确的,它是如何工作的?

提前感谢!

通常,输入时区是在 DRF 中确定的,同时在序列化程序的DateTimeField中解析请求(类似于表单字段)。

您可以控制此类输入的格式,甚至还有一个默认为 ['iso-8601'] 的常规设置DATETIME_INPUT_FORMATS

这基本上意味着输入既可以省略也可以使用 ISO-8601 格式指定时区,并且该字段通常能够根据您的 Django 设置确定是创建意识对象还是天真datetime对象。

如果属性设置为 None,它不会尝试将朴素datetime转换为 timezone ,也不会尝试将感知时区转换为朴素时区(如果属性未None)。

如果USE_TZ为 True,则该属性默认为 TIME_ZONE,否则为 None ;也可以在字段初始化中显式覆盖。

注意:有人应该向 DRF 发送 PR 以记录此行为。

有关更多信息,请参阅 Django 的时区文档

然后 Django 将解释这个朴素的日期时间来感知本地日期时间 TIME_ZONE设置?

Django 在模板/表单级别使本机日期时间时区感知,因为模板/表单不在 Django restframework 视图中使用,Django 不会转换日期时间。

在 Django REST 框架中,像普通 Django 一样,你必须设置 USE_TZTIME_ZONE 来激活时区设置,否则不会进行转换。

然而,直到 v3.8.0(2018 年 5 月发布),Django REST 框架只在解析阶段(json -> 模型)转换时区,而不是在渲染阶段(模型 -> json)。这让很多人感到困惑。

相关内容

  • 没有找到相关文章

最新更新