python - poner - Django: llama a un método solo una vez cuando se inicia el django
tutorial django (2)
Quiero inicializar algunas variables (de la base de datos) cuando comience Django.
Puedo obtener los datos de la base de datos, pero el problema es cómo debo llamar al método de inicialización. Y esto solo debe llamarse una vez.
Intenté buscar en otras páginas, pero no pude encontrar una respuesta.
El código actualmente se ve algo como esto ::
def get_latest_dbx (solicitud, ....):
# obtener los datos de la base de datos
def get_latest_x (solicitud):
get_latest_dbx (request, x, ...)
inicio de def (solicitud):
get_latest_x (solicitud)
hay algunos trucos para esto La solución general es tratar de incluir el código inicial en algunos lugares especiales, de modo que cuando el servidor se inicie, ejecutará esos archivos y también ejecutará el código.
¿Alguna vez has intentado poner print ''haha''
en los archivos settings.py :)?
Nota: tenga en cuenta que settings.py se ejecuta dos veces durante el inicio
Algunas personas sugieren (¿ Ejecutar código cuando Django solo se inicia ONCE? ) Invocar esa inicialización en el urls.py de nivel superior (que se ve raro, porque se supone que urls.py maneja el patrón de url). Hay otra solución al escribir un middleware: ¿dónde poner el código de inicio de Django? Pero creo que la mayoría de la gente está esperando a que se resuelva el boleto .
ACTUALIZAR:
Dado que el OP ha actualizado la pregunta, parece que la forma del middleware puede ser mejor, ya que realmente necesita un objeto de request
en el inicio. Todos los códigos de inicio se pueden poner en un método de request
personalizado de middleware, donde el objeto de request
está disponible en el primer argumento. Después de que se ejecutan estos códigos de inicio, se puede configurar algún indicador para evitar volver a ejecutarlos más tarde (al levantar la excepción MiddlewareNotUsed
solo funciona en __init__
, que no recibe un argumento de request
).
Por cierto, el requisito de OP parece un poco extraño. Por un lado, necesita inicializar algunas variables cuando Django comienza; por otro lado, necesita un objeto de request
en la inicialización. Pero cuando Django comienza, puede que no haya ninguna solicitud entrante. Incluso si hay uno, no tiene mucho sentido. Supongo que lo que realmente necesita puede estar haciendo una inicialización para cada sesión o usuario.