2014-04-28 24 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############