Redirect Flask/Werkzeug中的重定向未更改URL

Redirect Flask/Werkzeug中的重定向未更改URL,redirect,flask,werkzeug,Redirect,Flask,Werkzeug,我对pythonweb开发非常了解,所以请耐心听我说 我正在尝试使用Flask和以下代码设置一个非常基本的登录: @app.route('/') def index(): if verifyLoggedIn(): someData = gatherSomeData() return render_template('main.html', data=someData) else:

我对pythonweb开发非常了解,所以请耐心听我说

我正在尝试使用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/login/'。然而,在我登录之后,页面会加载“main.html”,但url栏仍然显示“localhost:5000/login/”。问题是,如果我点击刷新按钮获取“someData”的新值,我最终会回到登录屏幕。我发现任何事后行动都是如此。我是否遗漏了一些非常基本的信息?

您应该检查用户是否通过了“登录”路径的身份验证。如果是这样,请使用返回重定向(url\u表示('index'))重定向到“索引”路由

以下代码适用于我,基本上与您所做的相同:

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)

感谢那些回复的人,但经过更多的搜索,我终于发现答案已经在stackoverflow:p上了(对不起,在问之前我确实到处看了很多)


这个问题实际上是由jquery mobile和我缺少数据url属性引起的

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