2012-07-27 51 views
3

我正在使用webpy製作一個web服務器,現在我有一個簡單的表單和一個我寫的特殊類。我希望用戶能夠在代碼中寫入表單,並且如果輸入是函數調用,則調用用戶提交的函數,否則,如果輸入不是函數調用,則對輸入執行任何操作。我相信這必須在模板文件的某個地方實現?任何幫助將不勝感激從HTML表單運行Python代碼

回答

6

如果我理解正確,您正在尋找一種方法來在服務器上運行客戶端提交的代碼,從表單獲取輸入。

因此,假如你有一個看起來是這樣的(注意textarea元素的名稱)表單模板:

<form method="POST"> 
<textarea name="code" /> 
<input type="submit"> 
</form> 

,你會想POST方法添加到您的頁面類來處理輸入和運行代碼:

class MyPage: 
    def POST(self): 
     data = web.input() 
     eval(data.code) 

這是東西,你應該用表格做的是對任何人訪問你不能完全信任,因爲它給你的web的運行他們想要的任何代碼的能力服務器(例如他們c可以輕鬆地嘗試和刪除服務器上的所有文件)。但是,如果您對安全風險還是很滿意,請務必閱讀Pythons eval的文檔以查看您可以傳遞給它的其他參數。

+0

我想我遇到了我的表單如何實現的問題,使用webpy我在服務器上渲染了一些表單: 'my_form = web.form.Form(web.form.Textbox('code',class_ = 'code',id ='code')' and in the template: '

$:form.render()
' web.form對象的第一個參數應該是表單名稱,但是當我調用data.code時,我得到一個屬性錯誤:代碼 – langor 2012-07-27 16:59:54

+0

Nevermind我有權訪問現在,我只是遇到語法問題,並使用webpy的eval – langor 2012-07-27 19:47:13

3

創建一個Python的CGI腳本,並在您的網絡服務器的CGI bin中運行它。 Here is a tutorial.然後腳本就可以訪問表單的輸入並做任何你想做的事情。

+0

cgi模塊也可以非常有幫助,特別是在訪問表單時。 – user1557602 2012-07-27 15:53:10

+0

鏈接已損壞!!!!!!!!!!!!!! – 2017-10-24 08:09:38