Estoy implementando un proyecto web realmente liviano, que tiene solo una página, mostrando los datos en un diagrama. Yo uso Django como un servidor web y d3.js como trazado de rutina para este diagrama. Como se puede imaginar, hay solo algunas series de tiempo simples que tienen que ser respondidas por el servidor Django, entonces me preguntaba si simplemente podría mantener esta variable en RAM. Mi primera prueba fue positiva, tuve algo como esto en mi views.py:django vars en ram
X = np.array([123,23,1,32,123,1])
@csrf_exempt
def getGraph(request):
global X
return HttpResponse(json.dumps(X))
Aviso, X
se actualiza por otra función de vez en cuando, pero todos los accesos de usuario es de sólo lectura. ¿Tengo que tratar con
- problemas de seguridad mediante la definición de una variable global?
- inconsistencias en general?
Encontré a thread discutiendo variables globales en Django, pero en ese caso, la dificultad es manejar el acceso de escritura múltiple.
Para responder a posibles preguntas sobre por qué no quiero almacenar datos en la base de datos: todos los datos que obtuve en mi X
ya están almacenados en una enorme base de datos remota y esta aplicación web solo necesita mostrar datos.
Como miembro de la comunidad de Django, no necesariamente diría "no". He hecho algunas cosas muy similares. Pero +1 para el backend de caché, es una forma mucho mejor de resolver este problema. –
@Joe Intenté esto y funciona bien con las solicitudes HTTP normales, pero cuando lo llamo mediante 'AJAX' no se almacena en caché. Supongo que Django considera que cada solicitud de 'AJAX' es diferente a la anterior y calcula 'X' nuevamente. ¿Cómo lidiar con eso? Pero gracias, una vez más por recomendar el sistema de caché Django, parece ser bastante más elegante que los vars globales –
¡no importa! Lo resolví usando 'La API de caché de bajo nivel'. Es simplemente perfecto. Muchas gracias –