在后端调用另一个python文件

时间:2015-01-26 02:44:01

标签: python python-2.7 mod-wsgi

我已经安装了“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方式?

感谢。

1 个答案:

答案 0 :(得分:0)

与cgi / php不同,你的web服务器解析请求并将它们分派给相应的脚本文件,在wsgi世界中你有一个python脚本可以获取所有请求并负责解析和分派。因此,当您从index.py重定向到test.py时,您只需再次调用indexenv[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()