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

qmelpv7a  于 2023-05-16  发布在  Python
关注(0)|答案(3)|浏览(179)

我试图在Django控制台使用的环境中执行一个外部代码段,用于调试和类似终端的目的,以便它可以连接到数据库等。
基本上,我只是出于同样的原因使用它,一个人会摆弄控制台,但我使用较长的片段输出一些格式化的信息,所以它是方便的,有一个实际的文件中的代码与IDE操纵。
一个答案说你可以通过执行python manage.py shell < snippet.py来做到这一点,但我没有看到成功的结果。虽然没有报告错误,但我没有得到异常输出,而只有一系列>>>提示。
那我该怎么做呢
顺便说一句,我使用PyCharm,以防这个IDE有一个简短的方式来做这件事或任何特殊的工具。

6gpjuf90

6gpjuf901#

我会说创建一个新的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()之后。

fnatzsnv

fnatzsnv2#

很多时候你需要脚本来处理db或更多。但是你需要Django的方式。ORM并使用项目中的所有内容。
您可以结帐https://github.com/django-extensions/django-extensions
您可以在项目主目录中创建一个scripts文件夹,并记录一个方法运行。该应用程序为您提供了一种轻松运行这些脚本方法。怎么做。
步骤1 -安装软件包。第2步-在项目根目录下创建一个脚本文件夹,并将'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
n6lpvg4x

n6lpvg4x3#

如果这只是一个剧本,

import django
django.setup()

from myapp.models.import MyModel

你需要设置你的环境变量,所以从IDE运行它是最简单的(让它成为同一个项目的一部分,右键单击文件,应该有一个运行选项)。
如果您正在寻找在生产环境中运行的东西,我会按照DanEEStar的建议创建一个管理命令。

相关问题