3

在我将 mod_python 用于 python 网站之前。不幸的是 mod_python 不再是最新的,所以我寻找另一个框架并找到了 mod_wsgi。

在 mod_python 中,可以有索引方法和其他方法。我想要不止一页被调用。像这样的东西:

def application(environ, start_response):
    status = '200 OK'
    output = 'Hello World!'

    response_headers = [('Content-type', 'text/plain'),
                        ('Content-Length', str(len(output)))]
    start_response(status, response_headers)

    return [output]

def test(environ, start_response):
    status = '200 OK'
    output = 'Hello test!'

    response_headers = [('Content-type', 'text/plain'),
                        ('Content-Length', str(len(output)))]
    start_response(status, response_headers)

    return [output]

mod_wsgi 有可能吗?

解决方案:Flask 框架可以满足我的需要

#!/usr/bin/python
from flask import Flask
from flask import request
app = Flask(__name__)
app.debug = True
@app.route("/")
def index():
    return "Hello index"

@app.route("/about")#, methods=['POST', 'GET'])
def about():
    content = "Hello about!!"
    return content

if __name__ == "__main__":
    app.run()
4

1 回答 1

4

WSGI 是 webapps 的通用入口点,也就是说,您在搜索 mod_wsgi 时只找到 hello world 的原因是您正在搜索 mod_wsgi 而不是实现标准的框架。

这么看,wsgi 有点像洋葱。网络服务器将请求发送到您的可调用对象。有 2 个参数:environstart_response。据我所知,start_response 是发送标题的函数,environ 是存储所有参数的地方。

您可以滚动自己的框架或使用金字塔、烧瓶等。这些框架中的每一个都可以与 wsgi 绑定。

然后创建一个处理请求的 wsgi 中间件。然后,您可以将“PATH_INFO”解析为不同的可调用对象。

def my_index(environ):
    response_headers = [('Content-type', 'text/plain')]
    return response_headers, environ['PATH_INFO']

def application(env, st):
    response = None
    data = None
    if environ['PATH_INFO'] == '/index':
        response, data = my_index(environ)

    st('200 ok', response)

    return [data]

这是一个相当简单的例子,但是在环境中你可以做任何你想做的事情。wsgi 本身并没有做任何你可能已经习惯于使用 mod_python 的事情。它实际上只是用于网络服务器的 python 接口。

编辑

正如评论中的其他人所说,如果您不知道自己在做什么,请不要尝试自己动手。考虑使用其他框架并首先了解更多信息。

例如,您需要编写正确的方法将函数绑定到 url。正如我在示例中所写的那样非常糟糕,但应该知道它是如何在后台完成的。您可以使用正则表达式处理请求以提取 id 或使用类似于遍历金字塔和 zope 的东西。

如果您真的坚持自己滚动,请查看 webob 教程。

http://docs.webob.org/en/latest/do-it-yourself.html

于 2012-06-29T09:02:37.053 回答