A veces deseo ejecutar un archivo en el contexto de mi proyecto Django, como si estuviera usando el shell, pero con la comodidad de usar un editor de texto. Esto es principalmente para probar algo o prototipar rápidamente alguna funcionalidad antes de ponerla en una vista, prueba, tarea recurrente o comando de administración.¿Cómo ejecuto un script arbitrario en el contexto de mi proyecto Django?
Sé que puedo pegar estas líneas en la parte superior de mi archivo .py y se quedará en el contexto de Django:
import sys
sys.path.append('/location/of/projet')
from django.core.management import setup_environ
import settings
setup_environ(settings)
pensé que sería más fácil para que un comando de gestión que se lleva en el argumento, un módulo de Python para ejecutar, y lo ejecuta en el entorno de Django. Aquí está el comando 'runmodule' escribí:
from django.core.management.base import BaseCommand, CommandError
class Command(BaseCommand):
help = "Runs an arbitrary module, in the Django environment, for quick prototyping of code that's too big for the shell."
def handle(self, *args, **options):
if not args:
return
module_name = args[0]
try:
__import__(module_name)
except ImportError:
print("Unable to import module %s. Check that is within Django's PYTHONPATH" % (module_name))
Esto parece que funciona - puedo pegar un código en un módulo, y pasarlo como argumento de este comando, y va a se ejecutan, por ejemplo,
python manage.py runmodule myapp.trysomethingout
que ejecutará myapp/trysomethingout.py. ¿Es ésta la mejor manera de hacer ésto?
puedes ponerlo directamente en tu script de python en tu if __name__ == "__main__": con esta línea: os.environ.setdefault ("DJANGO_SETTINGS_MODULE", "settings") – OriolJ