求助如何在 flask 中访问未定义的 url 时重定向到其他页面

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求助如何在 flask 中访问未定义的 url 时重定向到其他页面相关的知识,希望对你有一定的参考价值。

参考技术A 如果返回的status code 是404就直接转到其他页面

使用 jQuery mobile 在 Flask 中调用重定向(url_for('xxx'))后浏览器中的 URL 未更新

【中文标题】使用 jQuery mobile 在 Flask 中调用重定向(url_for(\'xxx\'))后浏览器中的 URL 未更新【英文标题】:Url in browser not updated after call of redirect( url_for('xxx' )) in Flask with jQuery mobile使用 jQuery mobile 在 Flask 中调用重定向(url_for('xxx'))后浏览器中的 URL 未更新 【发布时间】:2012-12-01 19:47:24 【问题描述】:

我有一个使用 Flask 的非常简单的 python 程序,如下所示。它通过弹出和注销处理登录。问题是浏览器中的 url 没有被 redirect(url_for()) 调用更新。

@app.route('/')
def index():
    if not 'username' in session:
        # contains a button showing a login popup form with action set to '/login'
        return render_template('welcome.html')
    else:
        # contains a logout button with a href to '/logout'
        return render_template('webapp.html') 


@app.route('/login', methods=['POST'])
def login():
    session['username'] = request.form['username']
    return redirect(url_for('index'))


@app.route('/logout')
def logout():
    session.pop('username', None)
    return redirect(url_for('index'))

访问“/”时,会显示欢迎页面。当我单击该按钮时,会显示登录弹出窗口,并且其表单操作会重定向到“/login”。这有效,并且 login() 函数被调用并执行。重定向也是如此,但浏览器不会更新显示的 url。

所以 webapp 页面显示为 /logon url。当我单击重新加载时,我收到一个错误,因为它尝试重新加载 /logon,而它应该重新加载已重定向的“/”。

/logout 也是如此。当显示 webapp 页面并单击注销按钮时,将加载 /logout 页面,该页面执行 logout() 函数并重定向到 index.html。但是该网址留待注销。

如果我然后重新加载页面,它会成功,因为 /logout 接受 GET 方法,然后 url 会更新为 / ,因为它本来应该放在首位。

我认为这是一个 jQuery 移动问题,但无法找出问题所在。从 python 和 Flask 的角度来看,它与我能找到的所有登录示例匹配。

【问题讨论】:

【参考方案1】:

写完问题终于解决了。

问题是由 jQuery mobile 和缺少 data-url 属性引起的。

通过在页面 div 中添加 data-url 属性,浏览器中的 url 会更新并且一切正常。

<div data-role="page" id="welcome" data-url=" url_for('index') ">

【讨论】:

就是这样 - 只是在挖掘一些旧代码,我试图为你找到它...... :) 哦,好吧!

以上是关于求助如何在 flask 中访问未定义的 url 时重定向到其他页面的主要内容,如果未能解决你的问题,请参考以下文章

Python中Flask框架的变量和函数

使用 jQuery mobile 在 Flask 中调用重定向(url_for('xxx'))后浏览器中的 URL 未更新

Flask GET - 在 URL 中检索未确定数量的参数

3-flask 中的请求和响应

“尝试在浏览器窗口中加载我的flask应用程序时出现URL未找到错误”

Django与Flask的对比:路由映射的区别