-1

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

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

我以前从未将 Python 用于 Web 内容,而 Django 在这里似乎有点矫枉过正,因为我需要做的就是运行一个函数,而其他一切都是纯 HTML、CSS 和 JS

那么有没有一种简单的方法可以做到这一点?

4

3 回答 3

1

正如我在其他答案中所描述的那样使用 CGI是可行的,并且设置起来很简单,但它有点原始,并且有为每个请求启动一个新进程的开销。另一个更常见的解决方案是使用 WSGI,即 Web 服务器网关接口,在PEP 333 for Python 2 和PEP 3333 for 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再次使用,但这一次,显式传递文件以从中读取数据,该文件恰好隐藏在environkey 下wsgi.input

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."

这种方法的缺点是涉及更多的服务器配置,这chmod与 CGI 脚本的即插即用方法相反。好处是你有很多包装器让你的事情变得容易:举几个轻量级的包装器,有WerkzeugWebOb。甚至还有Flask对你隐藏了很多,但仍然设法拥有一个最小的界面。

于 2013-08-18T23:41:12.010 回答
0

如果您想在 Web 上运行 python 代码,另一个选择是使用Jython,这是一个基于 JVM 的 python 实现。听起来您不需要很多库模块,因此 Jython 的主要限制(无法访问 C 编译的 python 扩展)并不是一个大问题。大多数服务器和大多数 Web 客户端都有一个可以运行 Jython 的 JVM。这里有一些用于在服务器端其他环境中部署 Jython 的资源 正如您在第二个参考资料中所见,您还可以将 Jython 静态编译为可嵌入页面中的小程序 - 但前提是您使用的是 2.1 版本,而不是当前版本2.5 系列。

于 2013-08-19T03:37:58.567 回答
0

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

一个简单的 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()

cgi模块的文档有更多示例。

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


就机械而言,就是这样。有时习惯 PHP 的人希望其他语言允许将代码嵌入到更大的文档中,例如:

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

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

在 Python 中通常处理这种情况的方式是使用模板。例如,您有一个如下所示的模板:

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

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

# assuming template has already been read into a variable
name = fields['name'].value
# other logic...
print(template.format(name=name))
于 2013-08-18T23:28:36.060 回答