运行Django Management命令 - 由站点访问者触发

时间:2014-04-28 18:05:13

标签: django django-views django-manage.py

我有一个使用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)如果是,我如何在安全方面明智地修复权限问题?

1 个答案:

答案 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############