2014-04-28 14 views
1

我有一个使用Ajax每10秒获取一次数据的网页。我想每60秒调用一次,并使Ajax视图启动一个管理命令:“python manage.py collect_ticker -i”。这样,我可以在访问者打开页面时收集代码数据,而不是每10秒钟检查一次新的代码数据。运行Django管理命令 - 由网站访问者触发

我正在使用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) 

的问题是,我收到响应:

[错误13]权限被拒绝

问题:

1)Django允许网站访问者执行管理命令是否合适?

2)如果是,我该如何解决权限问题,同时保证安全性?

回答

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