微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何通过外部python脚本在Django shell中执行代码?

我想实现的是:

我想创build一个python脚本来从CLI停用数据库中的Django用户。 我想出了这个:

$ sudo python manage.py shell >>> user = User.objects.get(username=FooBar) >>> user.is_active = False >>> user.save() >>> exit()

上面的代码在我手动inputmanualy命令后执行。 不过,我想把这个命令放在一个.py脚本里

$ sudo python script.py

现在我已经尝试了不同的方法

如何创buildmysite.wsgi文件

django.request:禁止(Referer检查失败 – 不Referer。)

python manage.py syncdb失败,“错误地configuration:没有名为'psycopg2'的模块

Mod_wsgi工作进程分段错误(11)

Django Admin + FORCE_SCRIPT_NAME +loginredirect不正确

os.system("command1 && command2 && command3")

subprocess.Popen("command1 && command2 && command3",stdout=subprocess.PIPE,shell=True)

问题:

这不行! 我认为这个问题在这里,因为Python等待,直到打开的Djangoshell(第一个命令)完成,永远不会。 它不会执行脚本中的其余部分,因为第一个命令将其置于Hold状态。

subprocess.popen可以在shell中执行命令,但只能在Python shell中执行,我想使用Django shell。

任何人想法如何使用.py脚本访问Django shell以执行自定义代码

Django启动代码与wsgi懒加载

Apache剥去“授权”标题

Errno 13权限在Django上被拒绝,我不想使用这个目录

使用Django的RabbitMQ从内部服务器获取信息

在apache + mod_wsgi下运行subprocess.Popen总是返回错误,返回码为-6

首先,你不应该用sudo来访问你的Python shell。 没有必要以root身份运行。

其次,创建从命令提示符运行的脚本的方法是编写自定义的manage.py脚本,以便运行./manage.py deactivate_users 。 完整的说明在文档中 。

如果你想执行一个访问Django模型的Python脚本,你首先需要设置一个环境变量:

import os os.environ.setdefault("DJANGO_SETTINGS_MODULE","<path>.settings")

在这文件中你需要用你的项目目录替换<path> ,这个目录包含文件settings.py 。

然后您可以导入您的模型文件,例如:

from <path>.models import User user = User.objects.get(username=FooBar) user.is_active = False user.save()

尝试将这些命令作为here文档输入到正在运行的django-shell:

$ sudo python manage.py shell << EOF user = User.objects.get(username=FooBar) user.is_active = False user.save() exit() EOF

根据丹尼尔早些时候在这个线程中的评论,我创建了一个简单的脚本来完成工作。 我正在分享这个试图达到相同目标的线程的读者。 这个脚本将创建一个工作的“ manage.py deactivate_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_user调用脚本您也可以使用相同的代码创建“activate_user”脚本,而不是user.is_active = False use = True。

打开Django Shell python manage.py shell

然后运行execfile('filename.py')

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐