如何通过外部python脚本在Django shell中执行代码?
我想要实现的目标: 我想创建一个python脚本,从CLI停用数据库中的Django用户。我想到了这个:如何通过外部python脚本在Django shell中执行代码?,python,linux,django,shell,manage.py,Python,Linux,Django,Shell,Manage.py,我想要实现的目标: 我想创建一个python脚本,从CLI停用数据库中的Django用户。我想到了这个: $ sudo python manage.py shell >>> user = User.objects.get(username=FooBar) >>> user.is_active = False >>> user.save() >>> exit() 当我手动输入一个又一个手动命令时,上述代码起作用。但是,我希望
$ sudo python manage.py shell
>>> user = User.objects.get(username=FooBar)
>>> user.is_active = False
>>> user.save()
>>> exit()
当我手动输入一个又一个手动命令时,上述代码起作用。但是,我希望将执行命令放在一个.py脚本中,如
$ sudo python script.py
现在我尝试了不同的方法:
os.system(“command1&&command2&&command3”)
subprocess.Popen(“command1&&command2&&command3”, stdout=subprocess.PIPE,shell=True)
subprocess.popen
可以在shell中执行命令,但只能在Python shell中执行,我想使用Django shell
有人知道如何使用.py脚本访问Django shell以执行自定义代码吗?尝试将命令作为以下文档输入到正在运行的Django shell:
$ sudo python manage.py shell << EOF
user = User.objects.get(username=FooBar)
user.is_active = False
user.save()
exit()
EOF
$sudo python manage.py shell首先,您不应该使用sudo
访问python shell。不需要以root身份运行
其次,创建从命令提示符运行的脚本的方法是编写一个自定义manage.py脚本,这样您就可以运行/manage.py deactivate\u users
。完整的操作说明见。如果要执行访问Django模型的Python脚本,首先需要设置一个环境变量:
import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "<path>.settings")
根据Daniel在本帖前面的评论,我创建了一个简单的脚本来完成这项工作。我将此分享给本帖的读者,他们正试图实现同样的目标。此脚本将创建一个有效的“manage.py deactivate\u user”函数
这是Django应用程序文件夹结构的示例参考:
您希望创建“deactivate_user.py”文件并将其放置在management/commands/deactivate_user.py目录中
from django.core.management.base import BaseCommand, CommandError
from django.contrib.auth.models import User
class Command(BaseCommand):
help = 'Deactivate user in the database'
def handle(self, *args, **options):
username = raw_input('Please type the username of the user you want remove: ')
try:
user = User.objects.get(username=username)
user.is_active = False
user.save()
print ('User is now deactivated in the database.')
except User.DoesNotExist:
print ('Username not found')
通过使用“python manage.py deactivate\u user”调用脚本。您还可以使用相同的代码创建“activate\u user”脚本,而不是user.is\u active=False use=True。打开Django Shellpython manage.py Shell
然后运行execfile('filename.py')
如果您使用的是Django 1.8+,那么另一个有用的选项是编写自己的脚本,并使用manage.py runscript调用它
例如,您可以编写一个名为db_init.py的脚本,并将其放在utils文件夹下。
然后使用以下命令启动此脚本:
python3 manage.py runscript utils.db_init
参考资料:
python manage.py shell
怎么样?
python3 manage.py runscript utils.db_init