2
我想構建一個web界面來執行一些python腳本。一個這樣的腳本用於登錄到網絡設備並運行一些命令,然後將它們保存到excel文件中。Django使用表單域中的變量運行python腳本
我不確定這是否正確,但我已經將腳本變成管理命令。
我可以通過使用call_command()獲取腳本從視圖運行,但我很難將表單域作爲變量傳遞給腳本。
這是我認爲是相關部分;
form.pyclass 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
我真的很難過這個,所以任何人有任何想法都可以提前幫助。
爲什麼不在一個單獨的線程中從視圖中運行腳本,並讓腳本將結果發佈到另一個可以處理該響應的視圖。這將全部做到異步,所以它不會讓你的web應用程序停滯 – arnm
@Alexei Nunez你有這樣的例子嗎?在將來,我計劃使用芹菜進行任務排隊。你有任何想法將表單域作爲變量傳遞給腳本嗎? –
不,我沒有一個例子,但我不明白爲什麼它不起作用。我不是說這是最好的建議,但它會起作用。如何從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