Buduję aplikację, która będzie służyć ludziom znajdującym się w różnych miejscach na całym świecie.
Używam Django-Rest-Framwork do komunikacji między klientami a serwerem.
Wszystkie wartości DateTime są zapisywane w DB jako UTC (mam USE_TZ = True
i TIME_ZONE = 'Greenwich'
w settings.py).Django-rest-framework renderers/parsery świadomy świadomy ramek
Otrzymam od użytkownika jego/jej lokalną strefę czasową.
Aby Test DRF dla świadomości czasowej Napisałem ten middleware ze stałej czasowej:
import pytz
from django.utils import timezone
class TimezoneMiddleware(object):
def process_request(self, request):
timezone.activate(pytz.timezone("Asia/Jerusalem"))
Problem brzmi:
Mam przypadek, w którym dostaję od "START_TIME" użytkownika i Pola "end_time" zawierają czasy w strefie czasowej użytkownika, która przechodzi przez UnicodeJSONRenderer
do , a następnie zapisana w DB. Są one jednak zapisywane jako , tak jakby były w UTC.
W tym miejscu można oczekiwać, że serializator (lub analizator składni) traktuje dane wejściowe datetime od użytkownika jako datetime, które muszą zostać przekonwertowane z "Asia/Jerusalem" na UTC przed zapisaniem do DB, ponieważ wykonałem timezone.activate(pytz.timezone("Asia/Jerusalem"))
.
To samo dotyczy danych analizowanych w odpowiedzi poprzez JSONParser
.
Oczekując, że pola DateTime w zwróconym pliku JSON będą znajdować się w strefie czasowej aktywowanej w oprogramowaniu pośredniczącym, są zwracane jako UTC.
Jak mogę to łatwo osiągnąć w DRF?
Znalazłeś rozwiązanie? – yakxxx
@yakxxx - Niestety jeszcze nie. Na razie otrzymuję i zwracam wartości datetime w GMT, a konwersja do lokalnej strefy czasowej odbywa się po stronie klienta. – OrPo
Czy możesz wysłać prośbę? Zastanawiam się, którego formatu używałeś w JSON? Czy używasz łańcucha ISO 8601 ze strefą czasową? – codingjoe