【问题标题】:Redirects in Flask/Werkzeug are not changing the URLFlask/Werkzeug 中的重定向不会更改 URL
【发布时间】:2013-07-10 00:56:32
【问题描述】:

我非常了解python web开发,所以请多多包涵。

我正在尝试使用 Flask 和以下代码设置一个非常基本的登录:

@app.route('/')
def index():
        if verifyLoggedIn():
                someData = gatherSomeData()
                return render_template('main.html', data=someData)
        else:
                return redirect(url_for('login'))

@app.route('/login/', methods=['GET', 'POST'])
def login():
    if request.method == 'POST':
        if request.form['usr'] == user and request.form['pwd'] == password:
                session['user'] = request.form['usr']
                session['passwd'] = request.form['pwd']
                return redirect(url_for('index'))
        else:
                return render_template('out.html',name=request.form['usr'])
    else:
        return render_template('login.html')

当我通过“localhost:5000/”访问页面时,我正确地被转发到 '本地主机:5000/登录/'。但是,在我登录后,页面会加载“main.html”,但 url 栏仍然显示“localhost:5000/login/”。问题在于,如果我点击刷新按钮以获取“someData”的新值,我最终会回到登录屏幕。我发现在任何发布操作之后都是这种情况。我在这里遗漏了一些非常基本的东西吗?

【问题讨论】:

  • 您是否为您的应用程序设置了一个秘密(没有它们,Flask 的会话将无法工作)?

标签: redirect flask werkzeug


【解决方案1】:

感谢那些回复的人,但经过更多搜索,我设法发现答案已经在stackoverflow上:p(对不起,我确实在询问之前确实环顾了很多)

Url in browser not updated after call of redirect( url_for('xxx' )) in Flask with jQuery mobile

问题实际上是由 jquery mobile 和我缺少 data-url 属性引起的。

【讨论】:

    【解决方案2】:

    下面的代码对我有用,和你做的基本一样:

    from flask import Flask, request, render_template, session, redirect, url_for
    
    app = Flask(__name__)
    app.config['SECRET_KEY'] = 'sldkf'
    
    @app.route('/')
    def index():
        if session['user']:
            return render_template('main.html')
        else:
            return redirect(url_for('login'))
    
    @app.route('/login/', methods=['GET', 'POST'])
    def login():
        if request.method == 'POST':
            user = 'test'
            password = 'test'
            if request.form['usr'] == user and request.form['pwd'] == password:
                session['user'] = request.form['usr']
                session['passwd'] = request.form['pwd']
                return redirect(url_for('index'))
            else:
                return render_template('login.html')
        else:
            return render_template('login.html')
    
    @app.route('/logout/', methods=['GET'])
    def logout():
        session['user'] = None
        return redirect(url_for('login'))
    
    if __name__ == '__main__':
        app.run(debug=True)
    

    【讨论】:

      【解决方案3】:

      您应该检查用户是否在您的“登录”路径中通过了身份验证。如果是这样,使用return redirect(url_for('index')) 重定向到“索引”路由。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-12-15
        • 2019-12-29
        • 1970-01-01
        • 2020-11-04
        • 2011-01-02
        • 2012-06-09
        相关资源
        最近更新 更多