在网站上运行python函数

时间:2013-08-18 23:13:56

标签: python function web

所以我编写了一个解析文本的模块;某些关键字具有不同的能力并创造不同的东西。

我正在建立一个网站,我想要做的就是,点击一下按钮,div中的一些文本放入我的Python函数中,然后替换为该输出功能

我之前从未使用过Python作为web的东西,而Django在这里似乎有些过分,因为我需要做的就是运行一个函数,其他一切都是纯HTML,CSS和JS

这样有一种简单的方法吗?

3 个答案:

答案 0 :(得分:1)

使用CGI as I described in my other answer可以很容易地设置,但它有点原始,并且有为每个请求启动新进程的开销。另一个更常见的解决方案是使用WSGI,即Web服务器网关接口,在{2}中为Python 2定义,PEP 333在Python 3中定义。

有了它,你的Python代码将定义一个名为application的函数,该函数接受两个参数environstart_response,并返回一个可迭代的参数。例如,以下是输出静态“Hello,world!”的方法:

def application(environ, start_response):
    start_response(200, [('Content-Type', 'text/html')])
    yield "Hello, world!"

要解析输入,您可以再次使用cgi.FieldStorage,但这一次,显式传递文件以读取数据,这恰好隐藏在environ下的密钥{{1}下面}}:

wsgi.input

这种方法的缺点是涉及更多的服务器配置,而不是CGI脚本的drop import cgi def application(environ, start_response): start_response(200, [('Content-Type', 'text/html')]) fields = cgi.FieldStorage(environ['wsgi.input']) if 'name' in fields: name = fields['name'].value yield "Hello, {name}.".format(cgi.escape(name)) else: yield "Please POST a name parameter." - and-go方法。好处是你有很多包装让事情变得简单:举几个轻量级包装,有PEP 3333Werkzeug。甚至有WebOb从你身上隐藏了很多这样的东西,但仍然设法有一个最小的界面。

答案 1 :(得分:0)

您可以使用CGI脚本。 CGI脚本的调用方式与命令行调用的方式几乎相同,因此它应该相当直观。 Python有a cgi module来完成一些工作。

一个简单的CGI脚本可能如下所示:

#!/usr/bin/env python
import cgi

def main():
    fields = cgi.FieldStorage()
    print("Content-Type: text/html")
    print()
    if 'name' in fields:
        name = fields['name'].value
        print("Hello, {name}.".format(name=cgi.escape(name)))
    else:
        print("Please POST a name parameter.")

if __name__ == '__main__':
    main()

The documentation for the cgi module有更多例子。

为了让您的服务器运行它,您必须为脚本添加适当的权限(可能是chmod +x)并将其放在CGI脚本的指定目录中,通常命名为{{1} }。


就机制而言,就是这样。有时人们习惯于PHP期望其他语言允许在一些较大的文档中嵌入代码,例如:

cgi-bin

Python不是为此而设计的。 Python没有像PHP那样在内容中嵌入逻辑,而是以相反的方式工作,将内容嵌入到逻辑中。正如你可以想象的那样,以这种方式对所有内容进行硬编码会很快变得难看。

Python中通常使用的方法是使用模板。例如,您有一个如下所示的模板:

<?py import cgi ?>
<?py fields = cgi.FieldStorage() ?>
<h1>Greeting</h1>
<p>Hello, <?py print(fields['name'].value) ?>.</p>

然后,您的Python脚本会执行以下操作:

<h1>Greeting</h1>
<p>Hello, {name}.</p>

答案 2 :(得分:0)

如果要在Web上运行python代码,另一个选择是使用Jython,这是一个基于JVM的python实现。听起来你不需要很多库模块,因此Jython的主要限制(缺乏对C编译的python扩展的访问权限)不是一个大问题。大多数服务器和大多数Web客户端都有一个可以运行Jython的JVM。这里有几个用于部署Jython server sideother environments的资源。正如您在第二个引用中所看到的,您还可以将Jython静态编译为可嵌入页面的applet - 但仅限于使用2.1发布,而不是目前的2.5系列。