gpt4 book ai didi

python网页mod_wsgi

转载 作者:太空宇宙 更新时间:2023-11-03 15:23:25 25 4
gpt4 key购买 nike

在我为 python 网站使用 mod_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()

最佳答案

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

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

您可以推出自己的框架或使用 pyramid、flask 等。这些框架中的每一个都可以与 wsgi 绑定(bind)。

然后您创建一个 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]

这是一个相当简单的例子,但是有了 environ,你可以做任何你想做的事。就其本身而言,wsgi 不会做任何您可能已经习惯使用 mod_python 的事情。它实际上只是用于网络服务器的 python 接口(interface)。

编辑

正如评论中的其他人所说,如果您对自己在做什么一无所知,请不要尝试自己动手。考虑使用其他框架并先详细了解它。

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

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

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

关于python网页mod_wsgi,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11258326/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com