基於Django的控制(WEB伺服器SHELL指令碼的運行)指南
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"<br />"http://www.w3.org/TR/html4/loose.dtd"><br /><html><br /><head><br /><meta http-equiv="Content-Type" content="text/html; charset=utf8"><br /><title>pop up</title><br /><mce:script language="javascript"><!--<br />function closeit() {<br />setTimeout("self.close()",10000) //..<br />}<br />// --></mce:script><br /></head><br /><body onload="closeit()"><br /><p align="left"> After 10 second,this page will be forced to close automatically.<br /><form><br /><INPUT TYPE='BUTTON' value='close' onClick='window.close()'><br /></form><br /></body><br /></html>
在這個page.html中,實現了兩個功能。
一,10秒自動關閉彈出頁面。
二,添加了一個自動關閉按鈕。
這個彈出頁面怎麼彈出來的呢?
<script language="JavaScript" type="text/JavaScript"><!--<br />window.open ('page.html','newwindow','height=100,width=400,top=0,left=0,toolbar=no,menubar=no,scrollbars=no,resizable=no,location=no,status=no')<br />// --></mce:script>
將這個指令碼放在head裡面,將自動開啟page.html頁面。
在page.html中添加
<form method="POST" action="/711/auth/"><br /> <p align="left" class="style5">Step One,Account Authentication:<br /> <input type="submit" name="Submit2" value="authentication"><br /> </form><br />
當單擊authentication按鈕時,將執行/711/auth函數。
在urls中,
from django.conf.urls.defaults import *</p><p># Uncomment the next two lines to enable the admin:<br /># from django.contrib import admin<br /># admin.autodiscover()</p><p>urlpatterns = patterns('',<br /> # Example:<br /> (r'^711/index/$', 'webcontrol.foo.web'),<br /> (r'^711/index/page.html$', 'webcontrol.foo.pop'),<br /> (r'^711/auth/$', 'webcontrol.foo.auth'),<br /> (r'^711/auth/page.html$', 'webcontrol.foo.pop'),<br /> (r'^711/refresh/$', 'webcontrol.foo.refresh'),<br /> (r'^711/refresh/page.html$', 'webcontrol.foo.pop'),<br /> (r'^711/firewall/$', 'webcontrol.foo.firewall'),<br /> (r'^711/firewall/page.html$', 'webcontrol.foo.pop'),<br /> (r'^711/auto/$', 'webcontrol.foo.auto'),<br /> (r'^711/auto/page.html$', 'webcontrol.foo.pop'),</p><p> # Uncomment the admin/doc line below and add 'django.contrib.admindocs'<br /> # to INSTALLED_APPS to enable admin documentation:<br /> # (r'^admin/doc/', include('django.contrib.admindocs.urls')),</p><p> # Uncomment the next line to enable the admin:<br /> # (r'^admin/(.*)', admin.site.root),<br />)<br />
將執行'webcontrol.foo.auth。
那我們再看'webcontrol.foo.auth是什麼,這個在foo.py中:
from django.shortcuts import render_to_response<br />import os</p><p>def web(request):<br />return render_to_response('index.html')<br />def auto(request):<br />os.system("sudo /home/fpzeng/server/debian/routing/auto.sh")<br />return render_to_response('popup.html')<br />def auth(request):<br />os.system("sudo /home/fpzeng/server/debian/routing/inode-client.sh")<br />return render_to_response('popup.html')<br />def refresh(request):<br />os.system("sudo dhclient eth0")<br />return render_to_response('popup.html')<br />def firewall(request):<br />os.system("sudo /home/fpzeng/server/debian/routing/iptbl.sh")<br />return render_to_response('popup.html')<br />def pop(prequest):<br />return render_to_response('page.html')<br />
webcontrol.foo.auth將執行“sudo /home/fpzeng/server/debian/routing/auto.sh”指令檔,並返回popup.html頁面。
這個頁面在urls處理中是“(r'^711/auth/page.html$', 'webcontrol.foo.pop'),”
通過這樣,將可以在web執行成品伺服器原生shell程式。
當然,這個sudo許可權需要在sudo組中提前給予,apache2運行程式時的使用者名稱是www-data