在后端调用另一个 python 文件

Call another python file in the backend

我已经安装了 "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”文件,进行一些处理,它会正常工作,但在尝试执行上述操作时出现此错误:

The page isn't redirecting properly. Firefox has detected that the server is redirecting the request for this address in a way that will never complete. This problem can sometimes be caused by disabling or refusing to accept cookies.

我知道我可以像 Django 这样的框架,但我想自己完成所有这些,这样我可以学到更多。那么,我如何才能像在 PHP 中那样进行这些重定向?什么是正确且最 pythonic 的重定向方式?

谢谢。

与 cgi/php 不同,您的 Web 服务器解析请求并将它们分派到相应的脚本文件,在 wsgi 世界中,您只有一个 python 脚本来获取所有请求并负责解析和调度。因此,当您从 index.py 重定向到 test.py 时,您只需再次调用 index,其中 env[PATH_INFO] 等于 "test.py".

关于整体结构,尽量不要像您在 php 中习惯的那样,根据单独的脚本来思考。只需构建您的应用程序,必要时将其拆分为函数和模块,然后检查 application() 中的 PATH_INFO 以将请求分派给适当的函数。例如,如果您的应用与用户打交道,您可能想要添加一个 user 模块并像这样调用它:

 import user

 def application(environ, start_response):
      if environ['PATH_INFO'] == '/user/create':
            user.create()
      if environ['PATH_INFO'] == '/user/delete':
            user.delete()