3

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

4

3 回答 3

2

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

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

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

于 2013-07-11T23:42:04.493 回答
1

以下代码对我有用,它与您正在做的基本相同:

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)
于 2013-07-10T06:45:01.170 回答
0

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

于 2013-07-10T02:43:23.703 回答