如何更改http响应中的时区(Django服务器)?

2024-10-06 15:25:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在运行没有任何代理的django服务器:

python manage.py runserver 0.0.0.0:80

我在linux服务器上设置了本地时区,这是正确的:

^{pr2}$

我还设置了本地时区设置.py我的django项目:

TIME_ZONE = 'Europe/Moscow'

检查了一下:

>>> from django.utils.timezone import localtime, now
>>> localtime(now())
datetime.datetime(2017, 4, 7, 12, 38, 42, 196476, 
tzinfo=<DstTzInfo 'Europe/Moscow' MSK+3:00:00 STD>)

但当我从客户端(Google Chrome浏览器)打开任何网页时,在http响应标题中时区不是本地的:

Date:Fri, 07 Apr 2017 09:38:42 GMT

如何在全局范围内更改所有项目的http标头中的时区?在


Tags: 项目djangopy服务器http代理datetimemanage
2条回答

使用pytz,作为astimezone方法

from pytz import timezone

time_zone = timezone(settings.TIME_ZONE)
currentTime = currentTime.astimezone(time_zone)

In your Middleware:

^{pr2}$

In Your view.py

from django.shortcuts import redirect, render

def set_timezone(request):
    if request.method == 'POST':
        request.session['django_timezone'] = request.POST['timezone']
        return redirect('/')
    else:
        return render(request, 'template.html', {'timezones': pytz.common_timezones})

In your templete.html

{% load tz %}
{% get_current_timezone as TIME_ZONE %}
<form action="{% url 'set_timezone' %}" method="POST">
    {% csrf_token %}
    <label for="timezone">Time zone:</label>
    <select name="timezone">
        {% for tz in timezones %}
        <option value="{{ tz }}"{% if tz == TIME_ZONE %} selected="selected"{% endif %}>{{ tz }}</option>
        {% endfor %}
    </select>
    <input type="submit" value="Set" />
</form>

How can I change timezone in http headers for all project globally?

HTTP日期头defined是以UTC表示的(由于历史原因,由字符GMT表示),因此Django或任何其他服务器或框架都不允许您将它们本地化到您的时区。你这么做有什么原因吗?在

Django确实有一种方法可以切换到本地时区(请参见activate()),但这只适用于特定于应用程序的内容,而不是HTTP报头。在

相关问题 更多 >