LS5*_*321 11 python django django-testing django-command-extensions
有时我想在我的Django项目的上下文中执行一个文件,就像我使用shell一样,但是使用文本编辑器也很方便.这主要是为了尝试一些东西,或者在将其放入视图,测试,重复任务或管理命令之前快速构建一些功能原型.
我知道我可以将这些行放在我的.py文件的顶部,它将在Django上下文中运行:
import sys
sys.path.append('/location/of/projet')
from django.core.management import setup_environ
import settings
setup_environ(settings)
Run Code Online (Sandbox Code Playgroud)
我认为制作一个带有参数的管理命令,运行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))
Run Code Online (Sandbox Code Playgroud)
这看起来很有效 - 我可以在模块中粘贴一些代码,并将其作为参数传递给此命令,并且它将被执行,例如
python manage.py runmodule myapp.trysomethingout
Run Code Online (Sandbox Code Playgroud)
这将执行myapp/trysomethingout.py.这是最好的方法吗?
使用正确的django上下文执行脚本的最佳方法是将DJANGO_SETTINGS_MODULE环境变量设置为您的设置模块(PYTHONPATH如果需要,则适当).在Windows中,这通常意味着执行:
set DJANGO_SETTINGS_MODULE=setting
Run Code Online (Sandbox Code Playgroud)
在bash中:
export DJANGO_SETTINGS_MODULE=setting
Run Code Online (Sandbox Code Playgroud)
您现在可以导入模型等.
请参阅:https://docs.djangoproject.com/en/dev/topics/settings/#designating-the-settings.
请注意,为了导入settings模块,应该使用from django.conf import settings.这考虑了DJANGO_SETTINGS_MODULE而不是自动使用settings.py.