Как мне выполнить произвольный скрипт в контексте моего проекта Django? - PullRequest
11 голосов
/ 12 июня 2011

Иногда я хочу выполнить файл в контексте моего проекта Django, как если бы я использовал оболочку, но с удобством использования текстового редактора.Это главным образом для того, чтобы что-то опробовать или быстро прототипировать некоторые функции, прежде чем поместить их в представление, тестирование, повторяющуюся задачу или команду управления.

Я знаю, что могу вставить эти строки в начало моего файла .py, и он будет работать в контексте Django:

import sys
sys.path.append('/location/of/projet')
from django.core.management import setup_environ
import settings
setup_environ(settings)

Я думал, что было бы легче сделатькоманда управления, которая принимает аргумент, запускает модуль python и выполняет его в среде Django.Вот команда 'runmodule', которую я написал:

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))

Похоже, это работает - я могу вставить некоторый код в модуль и передать его в качестве аргумента этой команде, и он будет выполненНапример,

python manage.py runmodule myapp.trysomethingout

, который запустит myapp / trysomethingout.py.Это лучший способ сделать это?

Ответы [ 2 ]

9 голосов
/ 12 июня 2011

Лучший способ выполнить скрипт с правильным контекстом django - это установить переменную окружения DJANGO_SETTINGS_MODULE для вашего модуля настроек (и присвоить PYTHONPATH при необходимости). В Windows это обычно означает выполнение:

set DJANGO_SETTINGS_MODULE=setting 

и в bash:

export DJANGO_SETTINGS_MODULE=setting 

Теперь вы можете импортировать ваши модели и т. Д.

см .: https://docs.djangoproject.com/en/dev/topics/settings/#designating-the-settings.

Обратите внимание, что для импорта модуля settings необходимо использовать from django.conf import settings. При этом учитывается DJANGO_SETTINGS_MODULE вместо автоматического использования settings.py.

0 голосов
/ 03 июля 2019

Лучшее решение представлено в этой статье.

Подсказки: убедитесь, что вы используете правильный путь к модулю настроек, в моем случае я пропустил вложенные каталоги, названные так же.Лучший способ избежать моей ошибки - использовать для начала что-то вроде этот шаблон.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...