如何在Django环境中执行外部脚本

时间:2017-01-24 09:54:06

标签: python django pycharm

我正在尝试在Django控制台使用的环境中执行外部代码片段以进行调试和类似终端的目的,以便它可以连接到数据库等。

基本上,我只是使用它的原因与调整控制台相同,但是我使用更长的片段来输出一些格式化的信息,因此将这些代码放在用IDE操作的实际文件中是很方便的。

答案说你可以通过执行python manage.py shell < snippet.py来做到这一点,但我没有看到成功的结果。虽然没有报告错误,但我没有得到例外输出,只有一系列>>>提示。

那我怎么能这样做呢?

顺便说一句,我正在使用PyCharm,以防这个IDE有一个简单的方法来执行此操作或任何特殊工具。

3 个答案:

答案 0 :(得分:9)

我想说创建一个新的Custom management command是实现这一目标的最佳方式。

但是你可以在django环境中运行你的脚本。我有时使用它来运行一个脚本或一些简单的测试。

您必须将环境变量DJANGO_SETTINGS_MODULE设置为您的设置模块,然后您必须致电django.setup()

我从manage.py脚本中复制了这些行,您必须设置正确的设置模块!

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "project.settings.local")
django.setup()

这是一个我有时使用的简单模板脚本:

# -*- coding: utf-8 -*-
import os
import django

#  you have to set the correct path to you settings module
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "project.settings.local")
django.setup()


from project.apps.bla.models import MyModel


def run():
    # do the work
    m = MyModel.objects.get(pk=1)


if __name__ == '__main__':
    run()

请务必注意,所有项目导入必须在调用django.setup()之后放置。

答案 1 :(得分:0)

很多时候你需要脚本来使用db或更多。但是你需要django方式,即ORM,并且玩你项目所拥有的每件事。

您可以结帐https://github.com/django-extensions/django-extensions

您在项目主页中创建脚本文件夹并记下方法运行。该应用程序为您提供了一种轻松运行这些脚本的方法。 怎么做。

第1步 - 安装包。 第2步 - 在项目根目录中使用 init .py创建脚本文件夹,并在应用程序中添加“django_extensions” 步骤3-在脚本文件夹中创建文件send_email_to_users.py。简单示例。

from project.models import MyModel
from django.contrib.auth.models import User
from project.utils import send_email

def run():
    results = MyModel.objects.all()
    for res in results:
         send_mail(res.email)

现在可以从命令行运行

python manage.py runscript send_mail_to_users

答案 2 :(得分:0)

如果它只是一个一个脚本,

import django
django.setup()

from myapp.models.import MyModel 

您需要设置环境变量,因此最容易从IDE运行它(使其成为同一项目的一部分,右键单击teh文件,应该有一个运行选项)。

如果您正在寻找在生产环境中运行的东西,我会根据DanEEStar的建议创建一个管理命令。