【发布时间】:2012-07-26 08:04:19
【问题描述】:
我正在使用 webpy 制作一个 Web 服务器,现在我有一个简单的表单和一个我写的特殊类。我希望用户能够在表单中编写代码,如果输入是函数调用,则调用用户提交的函数,否则如果输入不是函数调用,则对输入执行任何操作。我相信这必须在模板文件的某个地方实现?任何帮助将不胜感激
【问题讨论】:
我正在使用 webpy 制作一个 Web 服务器,现在我有一个简单的表单和一个我写的特殊类。我希望用户能够在表单中编写代码,如果输入是函数调用,则调用用户提交的函数,否则如果输入不是函数调用,则对输入执行任何操作。我相信这必须在模板文件的某个地方实现?任何帮助将不胜感激
【问题讨论】:
创建一个 Python cgi 脚本并在您的网络服务器的 cgi-bin 中运行它。 Here is a tutorial. 然后脚本可以访问表单的输入并使用它做任何你想做的事情。
【讨论】:
如果我理解正确,您正在寻找一种在服务器上运行客户端提交的代码并从表单获取输入的方法。
所以假设你有一个看起来像这样的表单模板(注意 textarea 元素的名称):
<form method="POST">
<textarea name="code" />
<input type="submit">
</form>
您需要在页面类中添加一个 POST 方法来处理输入并运行代码:
class MyPage:
def POST(self):
data = web.input()
eval(data.code)
这不你应该使用一个你不完全信任的任何人都可以访问的表单做的事情,因为它可以在你的网络服务器上运行他们想要的任何代码(例如他们可以轻松地尝试删除服务器上的所有文件)。但是,如果您对安全风险感到满意或只是在玩玩,请务必阅读 Python 文档eval 以查看您可以传递给它的其他参数。
【讨论】:
my_form = web.form.Form(web.form.Textbox('code',class_='code',id='code') 并在模板中:<form class="form" method="POST"> $:form.render() <input class="button" type="submit" value="send"/> </form> 的第一个参数web.form 对象应该是表单名称,但是当我调用 data.code 时出现属性错误:代码