我想实现的是:
我想创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
现在我已经尝试了不同的方法:
django.request:禁止(Referer检查失败 – 不Referer。)
python manage.py syncdb失败,“错误地configuration:没有名为'psycopg2'的模块
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以执行自定义代码?
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')