所以我编写了一个解析文本的模块;某些关键字具有不同的能力并创造不同的东西。
我正在建立一个网站,我想要做的就是,点击一下按钮,将div
中的一些文本放入我的Python函数中,然后替换为该输出功能
我之前从未使用过Python作为web的东西,而Django在这里似乎有些过分,因为我需要做的就是运行一个函数,其他一切都是纯HTML,CSS和JS
这样有一种简单的方法吗?
答案 0 :(得分:1)
使用CGI as I described in my other answer可以很容易地设置,但它有点原始,并且有为每个请求启动新进程的开销。另一个更常见的解决方案是使用WSGI,即Web服务器网关接口,在{2}中为Python 2定义,PEP 333在Python 3中定义。
有了它,你的Python代码将定义一个名为application
的函数,该函数接受两个参数environ
和start_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 3333和Werkzeug。甚至有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 side或other environments的资源。正如您在第二个引用中所看到的,您还可以将Jython静态编译为可嵌入页面的applet - 但仅限于使用2.1发布,而不是目前的2.5系列。