【问题标题】:Working with timezone in Django - Best Practices在 Django 中使用时区 - 最佳实践
【发布时间】:2019-10-23 13:23:33
【问题描述】:

我想听听您对我处理时区的做法的看法,如下所示。是正确的?我应该担心更多细节吗?

系统的每个客户端/用户都位于不同时间的区域,所以我在模型中放入了标识该区域的记录:

在模型中:

TIMEZONES = tuple(zip(pytz.all_timezones, pytz.all_timezones))
timezone = models.CharField (
    null = False,
    blank = False,
    max_length = 32,
    choices = TIMEZONES,
    default = 'UTC',
    verbose_name = "timezone",
    help_text = "Timezone"
)

当用户登录时,settings.py TIME_ZONE 变量根据登录用户的时区变化:

登录时:

from django.conf import settings
settings.TIME_ZONE = timezone

当我进行游标查询时,我在 settings.py 中设置时区:

在查询中:

from django.conf import settings
timezone = settings.TIME_ZONE
query = "" "
    SET TIMEZONE = '{}';
    ...
"" ".format (timezone)

在模板中,我启用了时区:

在模板中:

...
{% load tz%}
...
{% localtime on%}
...
{% endlocaltime%}

我希望我在上面的演示中很清楚。如果您需要更多详细信息,我可以提供。

感谢您分享您的经验。

【问题讨论】:

  • 设置模块并不意味着像那样动态使用。动态设置当前时区的方法是使用activate(),如here 所述。我不确定“光标查询”是什么意思;你是说你使用的是原始查询而不是 Django 的 ORM?

标签: django timezone


【解决方案1】:

理想的情况是使用中间件来确定用户的时区并将其保存在会话中。

Django 提供时区选择功能。使用它们来构建 对您有意义的时区选择逻辑。

这个答案很简短,因为正确答案在 Django 文档中

https://docs.djangoproject.com/en/3.0/topics/i18n/timezones/#selecting-the-current-time-zone

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-30
    • 2015-11-10
    • 2013-05-27
    • 2018-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多