2014-01-10 78 views
2

我想構建一個web界面來執行一些python腳本。一個這樣的腳本用於登錄到網絡設備並運行一些命令,然後將它們保存到excel文件中。Django使用表單域中的變量運行python腳本

我不確定這是否正確,但我已經將腳本變成管理命令。

我可以通過使用call_command()獲取腳本從視圖運行,但我很難將表單域作爲變量傳遞給腳本。

這是我認爲是相關部分;

form.py
class BaseLineForm(forms.Form): 
    username = forms.CharField(widget=forms.TextInput(attrs={'placeholder': 'Required', 'size': 20}), error_messages={'required': 'Required'}) 
    cec_pass = forms.CharField(widget=forms.PasswordInput(attrs={'placeholder': 'Required', 'size': 20}), error_messages={'required': 'Required'}) 
    enable_pass = forms.CharField(widget=forms.PasswordInput(attrs={'placeholder': 'Required', 'size': 20}), error_messages={'required': 'Required'}) 
    <additional form fields snipped...> 

views.py
from baseline.forms import BaseLineForm 
from django.core.management import call_command 

def baseline(request): 
    if request.method == 'POST': 
     form = BaseLineForm(request.POST) 
     if form.is_valid(): 
      username = form.cleaned_data['username'] 
      password = form.cleaned_data['cec_pass'] 
      enable = form.cleaned_data['enable_pass'] 
      call_command('baseline') 

baseline.py
from django.core.management.base import BaseCommand, CommandError 

class Command(BaseCommand): 
    args = '' 
    help = '' 

    def handle(self, *args, **options): 
     <I have tried to import the view but I get an error cannot import name views> 
     from baseline import views <if I run this from the shell it imports fine> 
     <rest of script here> 

環境; Centos 6.4,virtualenv,django 1.6,python 2.6

我真的很難過這個,所以任何人有任何想法都可以提前幫助。

+0

爲什麼不在一個單獨的線程中從視圖中運行腳本,並讓腳本將結果發佈到另一個可以處理該響應的視圖。這將全部做到異步,所以它不會讓你的web應用程序停滯 – arnm

+0

@Alexei Nunez你有這樣的例子嗎?在將來,我計劃使用芹菜進行任務排隊。你有任何想法將表單域作爲變量傳遞給腳本嗎? –

+0

不,我沒有一個例子,但我不明白爲什麼它不起作用。我不是說這是最好的建議,但它會起作用。如何從python運行腳本:http://stackoverflow.com/questions/3781851/run-a-python-script-from-another-python-script-passing-in-args。使用以下方式發佈帖子:http://docs.python-requests.org/en/latest/ – arnm

回答

1

這可能會幫助未來的人,所以我在這裏添加這個。

在task.py文件中的主項目目錄

@app.task(name='tasks.get_baseline') 
def get_baseline(args): 
    result = call(args) 

導入任務添加任務到視圖

from nettools import tasks 

創建ARGS

args = ['/path/tp/script/get_baseline.py', username, password, enable, user_email, device] 

運行列表任務

tasks.get_baseline.delay(args)