我已经安装了“mod_wsgi”,我正在后端试验python。我有一个php背景,所以我很难在后端重定向到另一个python文件,例如:
这是我的test.py,当我转到“http://localhost/”时调用:
def application(environ, start_response):
start_response("301 Redirect", [("Location", "http://localhost/test.py")])
return [""]
和“test.py”:
def application(environ, start_response):
status = "200 OK"
output = test()
response_headers = [('Content-type', 'text/html'), ('Content-Length', str(len(output)))]
start_response(status, response_headers)
return [output]
def test():
return "ok"
我不确定在“test.py”中使用“application”是否正确。
在php中,我会将用户重定向到另一个“* .php”文件,进行一些处理,它会正常工作,但在尝试执行上述操作时出现此错误:
页面未正确重定向。 Firefox检测到服务器正在以永远不会完成的方式重定向此地址的请求。 有时可能会因禁用或拒绝接受Cookie而导致此问题。
我知道我可以使用像Django这样的框架,但我自己想要这一切,所以我可以学到更多东西。那么,我怎样才能像在PHP中制作那些重定向一样?什么是重定向的正确和最pythonic方式?
感谢。
答案 0 :(得分:0)
与cgi / php不同,你的web服务器解析请求并将它们分派给相应的脚本文件,在wsgi世界中你有一个python脚本可以获取所有请求并负责解析和分派。因此,当您从index.py
重定向到test.py
时,您只需再次调用index
,env[PATH_INFO]
等于" test.py"。
关于整体结构,尽量不要考虑单独的脚本,就像你在php中习惯的那样。只需构建您的应用程序,将其拆分为函数和模块(如果必须),并检查PATH_INFO
中的application()
以将请求分派给适当的函数。例如,如果您的应用与用户交易,您可能需要添加user
模块并按以下方式调用它:
import user
def application(environ, start_response):
if environ['PATH_INFO'] == '/user/create':
user.create()
if environ['PATH_INFO'] == '/user/delete':
user.delete()