在 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_TZ
和 TIME_ZONE
来激活时区设置,否则不会进行转换。
然而,直到 v3.8.0(2018 年 5 月发布),Django REST 框架只在解析阶段(json -> 模型)转换时区,而不是在渲染阶段(模型 -> json)。这让很多人感到困惑。