我有一个使用Ajax每10秒获取一次数据的网页。我希望每隔60秒调用一次,并使Ajax视图启动一个管理命令:" python manage.py collect_ticker -i"。通过这种方式,我可以在访问者打开页面时收集自动收报机数据,而不是每隔10秒检查一次新的自动收报机数据。
我在Ajax视图中使用以下代码:
import subprocess
import os
import sys
fulldirname = os.path.abspath('../tickerproject/')
p = subprocess.Popen([fulldirname, 'python manage.py collect_ticker -i%d' % (i_ticker)],
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT)
问题是我收到了回复:
[Errno 13]许可被拒绝
问题:
1)在Django中允许网站访问者执行管理命令是否合适?
2)如果是,我如何在安全方面明智地修复权限问题?
答案 0 :(得分:2)
解决方案1:您可以使用call_command从django视图运行命令,而不会遇到权限问题:
from django.core.management import call_command
call_command('collect_ticker')
解决方案2:当访问者打开页面时,您可以直接从ajax / django视图调用该函数而不是管理命令
ex: def page_view(request):
management_command_replacement_function(params)
return HttpResponse()
def management_command_replacement_function(params)
####processing############