python网页mod_wsgi

时间:2012-06-29 08:16:31

标签: python mod-wsgi mod-python

在我使用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()

1 个答案:

答案 0 :(得分:4)

WSGI是webapps的一般入口点,它说,在搜索mod_wsgi时你只找到hello world的原因是你正在搜索mod_wsgi而不是用于实现标准的框架。

这样看,wsgi有点像洋葱。 Web服务器将请求发送到您的callable。有2个参数:environstart_response。据我所知,start_response是发送标题的函数,environ是存储所有参数的地方。

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

然后创建一个将处理请求的wsgi中间件。然后,您可以解析“PATH_INFO”以生成不同的callables。

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的东西。它实际上只是web服务器的python接口。

修改

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

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

如果你真的坚持自己动手,请看一下webob教程。

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