【问题标题】:python flask redirect to another pagepython烧瓶重定向到另一个页面
【发布时间】:2025-11-28 08:40:02
【问题描述】:

我有一个登录页面为login.py,它呈现login.html。在提交时我想重定向到mainpage.py,它呈现mainpage.html。但是在提交点击它只是不重定向。我收到一个找不到页面的错误。并且网址保持不变

@app.route('/login',methods = ['GET','POST'])
def index():
    try:
        if request.method =='POST':
            db_user = request.form['db_user']
            db_pwd = request.form['db_pwd']
            if (connect(db_user,db_pwd)==1):
                return redirect("/mainpage", code=302)
        else:
            return render_template('login.html')    
    except Exception as e:
        print(("error :", str(e)))
        return render_template('login.html')

重定向选项中应该提到什么?是呈现 html 的 html 文件名还是 py 文件名?我尝试使用 html 文件名、py 文件名和 @app.route 中的名称。但没有成功

【问题讨论】:

  • 尝试为 db connect 添加else 块。
  • 那么重定向方法正确吗?这应该是这里提到的 html 文件名还是 .py 文件名?
  • @kten redirect(url_for("your_function_name")) 更好,但指定一个 URL,如 /mainpage 应该没问题。
  • 应该在其他地方定义这个链接(/main)吗?除了 mainpage.py 本身?

标签: python flask


【解决方案1】:

404错误的原因:

当你重定向到/mainpage 时,Flask 会在你的login.py 文件中寻找路由处理程序,而不是mainpage.py。由于login.py 没有/mainpage 的路由处理程序,它给你一个404。它永远不会到达mainpage.py

您正在尝试做的事情和可能的解决方案:

您正在尝试做的是在不同文件中分离您的路线。为此,您需要明确告诉 Flask 您的路由处理程序在哪里(换句话说,它应该在哪些文件中查找路由处理程序)。

有两种方法可以做到这一点:

  1. 请参阅此文档 (Larger Applications),了解如何将文件组织为一个包。您必须将 mainpage.py 导入 login.py,反之亦然。

  2. 或使用蓝图:Modular Applications with Blueprints

请注意,只有当您的应用程序规模很大时,您才需要这样做。如果您只有几个路由处理程序,您可能应该将所有内容都放在一个文件中以保持简单。

【讨论】:

  • 谢谢。这正是问题所在。但是一个查询。如果我需要使用单独的文件并且需要将文件导入到其他文件中,如前所述。该文件是否必须定义为一个类?还是定义为包后可以导入?
  • 我相信包和模块都应该可以工作,但Flask documentation 建议使用包:“使用包而不是模块是个好主意”。
【解决方案2】:

redirect 的第一个参数是您希望客户端重定向到的 url。您可以将 url 硬编码为第一个参数。您还可以使用url_for 为给定端点生成 url。

例如:

@app.route("/url")
def endpoint():
    return "Test redirect & url_for"

您可以使用redirect(url_for("endpoint"))redirect("/url") 重定向到/url

Quickstart 指出了使用url_for 而不是硬编码url 的优点。

【讨论】:

    最近更新 更多