Establecer zona horaria de cookie -- python campo con datetime campo con http campo con django campo con geospatial camp codereview Relacionados El problema

Set time zone from cookie


3
vote

problema

Español

es el set_cookie VARIABLE ¿La forma correcta de señalar que se debe configurar la cookie? No me parece Pythonic:

  cookie = request.COOKIES.get(TIMEZONE_COOKIE_NAME) set_cookie = False if cookie and cookie in pytz.all_timezones_set:     timezone.activate(pytz.timezone(cookie)) elif request.ip:     geo = GeoIP2()     try:         time_zone = geo.city(request.ip).time_zone         if time_zone:             timezone.activate(pytz.timezone(time_zone))             set_cookie = True     except GeoIP2Error:         self.logger.warning('Could not determine time zone of ip address: %s', request.ip)  response = self.get_response(request) if set_cookie:     response.set_cookie(TIMEZONE_COOKIE_NAME, time_zone) return response   
Original en ingles

Is the set_cookie variable the correct way to signal that the cookie should be set? It does not seems pythonic to me:

cookie = request.COOKIES.get(TIMEZONE_COOKIE_NAME) set_cookie = False if cookie and cookie in pytz.all_timezones_set:     timezone.activate(pytz.timezone(cookie)) elif request.ip:     geo = GeoIP2()     try:         time_zone = geo.city(request.ip).time_zone         if time_zone:             timezone.activate(pytz.timezone(time_zone))             set_cookie = True     except GeoIP2Error:         self.logger.warning('Could not determine time zone of ip address: %s', request.ip)  response = self.get_response(request) if set_cookie:     response.set_cookie(TIMEZONE_COOKIE_NAME, time_zone) return response 
              

Lista de respuestas

1
 
vote
vote
La mejor respuesta
 

Editar: Bueno, mis sugerencias anteriores no funcionan con el hecho de que get_response tiene que ser llamado con la zona horaria correcta activa.


  • es el atributo time_zone2 de GeoIP2 siempre compatible con pytz BTW.?

Quizás lo siguiente funcionaría, verificando el valor de la cookie solo una vez y descartándolo si no se ajusta:

  cookie = request.COOKIES.get(TIMEZONE_COOKIE_NAME) if cookie not in pytz.all_timezones_set:     cookie = None  if not cookie and request.ip:     try:         cookie = GeoIP2().city(request.ip).time_zone     except GeoIP2Error:         self.logger.warning('Could not determine time zone of ip address: %s', request.ip)  if cookie:     timezone.activate(pytz.timezone(cookie))  response = self.get_response(request) if cookie:     response.set_cookie(TIMEZONE_COOKIE_NAME, cookie) return response   

Por lo tanto, la baja es una gran cantidad de menciones de cookie , al revés es que no es lo más costoso que tenías antes y la llamada para establecer la zona horaria es solo allí una vez.


Último punto, si algo así sucede que se necesita más de una vez, Ponlo en funciones separadas. Este fragmento es un poco corto para hacer esa llamada.

 

Edit: Well my previous suggestions don't work with the fact that get_response has to be called with the correct timezone active.


  • Is the time_zone attribute from GeoIP2 always compatible with pytz btw.?

Perhaps the following would work, verifying the cookie value only once and discarding it if it doesn't fit:

cookie = request.COOKIES.get(TIMEZONE_COOKIE_NAME) if cookie not in pytz.all_timezones_set:     cookie = None  if not cookie and request.ip:     try:         cookie = GeoIP2().city(request.ip).time_zone     except GeoIP2Error:         self.logger.warning('Could not determine time zone of ip address: %s', request.ip)  if cookie:     timezone.activate(pytz.timezone(cookie))  response = self.get_response(request) if cookie:     response.set_cookie(TIMEZONE_COOKIE_NAME, cookie) return response 

So, downside is a lot of mentions of cookie, upside is that it's not more costly what you had before and the call to set the timezone is only there once.


Last point, if anything like this happens to be needed more than once, put it into separate functions. This snippet is a bit short to make that call.

 
 
       
       

Relacionados problema

2  Dirección Geocoder  ( Address geocoder ) 
Si lo observa, hay variables de street_address , 99887766555443310 , 99887766555443311 reutilizado en toda la base de código. En realidad, son de los comp...

2  Identificar las polilíneas y operar en valores de campo [cerrado]  ( Identifying polylines and operating on field values ) 
cerrado. Esta pregunta es off-topic . Actualmente no está aceptando respuestas. ¿Quieres ...

2  Cálculo de dbgegografía  ( Dbgeography calculation ) 
Dada la siguiente pieza de código, se puede hacer mejor: public object DistanceFrom( IEnumerable<Coordinate> coordinates) { IEnumerable<DbGeography...

2  Análisis de datos de Big JSON Field y Geocode Services luego almacenar a PostgreSQL utilizando PsyCOPG2 en lugar de Django-ORM  ( Parsing data from big json field and geocode services then store to postgresql u ) 
Este código funciona, pero mi jefe me dijo que es un código muy malo, y no quiero desplegarlo. Es mi primera vez que trabaje como programador y tengo al menos...

5  Paginación de Laravel con fórmula haversina en ella  ( Laravel pagination with haversine formula in it ) 
Estoy usando la fórmula de Haversine para contar la distancia del código postal seleccionado al destino deseado. Tengo el siguiente scope en AppModelsBus...

1  Vectorizamos gradiente 2D con contenedores espacialmente variables  ( Vectorize 2d gradient with spatially varying bins ) 
El siguiente código lleva a algunos valores ssh y resuelve las ecuaciones para el movimiento geostrófico (diapositiva 8 aquí ). La parte principal del Có...

6  Control angular para ingresar latitud y longitud con validación  ( Angular control for inputting latitude and longitude with validation ) 
He construido un control personalizado para manejar la entrada del usuario en un formato legible por humanos, pero ahorre en un formato de máquina. Debe tene...

5  Fórmula Haversine en Clojure  ( Haversine formula in clojure ) 
Implementé el fórmula haversine para calcular la distancia entre dos (latitud , longitud) coordenadas. Me preguntaba si se ve natural para los programador...

2  Fórmula Haversine en SQL  ( Haversine formula in sql ) 
Esta es una implementación de la haversine fórmula en Microsoft Transact SQL. ¿Cómo puedo simplificar la función? en1 Aquí hay una prueba de la func...

7  Diagrama de Voronoi esférico, enfoque de división binario [cerrado]  ( Spherical voronoi diagram binary splitting approach ) 
cerrado. Esta pregunta es off-topic . Actualmente no está aceptando respuestas. ¿Quieres ...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos