¿Dónde debo colocar la operación de una sola vez en el marco de Django?

Quiero realizar algunas operaciones únicas como iniciar un hilo en segundo plano y rellenar un caché cada 30 minutos como acción de inicialización cuando se inicia el servidor Django, para que no impida que el usuario visite el sitio web. ¿Dónde debo colocar todo este código en Django?

  • Ponerlos en el archivo setting.py no funciona. Parece que va a causar una dependencia circular.
  • Ponerlos en el archivo __init__.py no funciona. El servidor Django lo llama muchas veces (¿Cuál es la razón?)

Simplemente creo scripts independientes y los programo con cron. Es cierto que es un poco de baja tecnología, pero simplemente funciona. Simplemente coloque esto en la parte superior de un script en el directorio de nivel superior de sus proyectos y llame según sea necesario.

 #!/usr/bin/env python from django.core.management import setup_environ import settings setup_environ(settings) from django.db import transaction # random interesting things # If you change the database, make sure you use this next line transaction.commit_unless_managed() 

Pusimos scripts de inicio de una sola vez en el nivel superior urls.py Aquí es a menudo donde van sus enlaces de administrador, también son de inicio único.

A algunas personas les gusta poner estas cosas en settings.py pero eso parece confundir las configuraciones (que no hacen mucho) con el rest del código del sitio (que hace cosas).

Para una operación en startserver, puede usar comandos de aduana o si desea una tarea periódica o una cola de taske puede usar apio

Se llamará __init__.py cada vez que se importe la aplicación. Entonces, si está usando mod_wsgi con Apache, por ejemplo, con el método prefork, entonces cada nuevo proceso creado está efectivamente “iniciando” el proyecto, importando así __init__.py. Parece que su mejor método sería crear un nuevo comando de administración, y luego cron para ejecutar cada cierto tiempo si esa es una opción. O eso, o ejecute ese comando de administración antes de iniciar el servidor. Podría escribir un script rápido que ejecute ese comando de administración y luego inicie el servidor, por ejemplo.