Python Flask - 如何在不同路由间传递值?

3 投票
2 回答
6873 浏览
提问于 2025-04-18 10:34

你好,我刚开始学习Flask,想要创建一个简单的登录功能。用户需要填写他们的用户名和密码(目前这些信息是我提前写好的),如果他们的账号信息通过验证,就会被带到他们的个人主页。个人主页上应该显示“你好”,后面跟着用户名。

验证功能运行得很好,用户也能顺利进入个人主页,但我无法把表单中的用户名从“login.html”传递到“profile.html”这个模板里。

下面是代码。我会提供能正常工作的代码,但没有尝试把用户名传递过去。

谢谢!

from flask import *

SECRET_KEY = "super secret"

app = Flask(__name__)
app.config.from_object(__name__)

@app.route('/')
def index():
return render_template('login.html')

@app.route('/login', methods=['GET', 'POST'])
def login():
    error = None
    if request.method == 'POST':
        if request.form['username'] == 'user' and request.form['password'] == 'pass':
            session['loggedin'] = True
            return redirect(url_for('profile'))
        else:
            error="Invalid credentials. Please try again."
    return render_template('login.html', error=error)

@app.route('/profile')
def profile():
    return render_template('profile.html')

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



if __name__ == '__main__':
    app.run(debug=True)

2 个回答

1

为什么不利用Flask的许多实用模块呢?这些模块让Flask成为一个快速开发网页的迷你框架,非常吸引人。

Flask-login,正如上面提到的,可以简化用户登录的过程,并且管理用户的会话。Flask的会话功能还会自动保存已登录用户的会话数据。这让你可以在登录表单中实现一个“记住我”的功能。

另外,为了安全起见,你可能想在一些函数上加上@login_required这个装饰器,它是flask-login模块的一部分。这样,如果用户没有登录,就会自动被重定向到登录页面。

下面是一个实现这个功能的索引函数的例子:

from flask import render_template, session
from flask.ext.login import login_required

@app.route('/')
@login_required
def index():
    return render_template("index.html")

你还可以使用flask.ext.openid来让用户登录变得更方便。

1

我觉得你可能没理解你辛苦做的登录页面的重点。

那用户接下来要访问的页面呢?你会再发送一次用户名吗?当然不会。

我建议你定义一个全局变量(比如会话?数据库数据?),里面存储当前登录用户的数据,这样你就可以使用用户的所有信息,而不仅仅是他的用户名(比如年龄、帖子等等)。

最后一件事,我使用的是 flask-login,我真的很喜欢它,它简单地管理我的登录会话和视图,猜猜怎么着?还有 current_user,里面有当前登录用户的数据 :)

Flask-login 简介:

Flask-Login 为 Flask 提供用户会话管理。

它处理登录、登出以及在较长时间内记住用户会话的常见任务。

撰写回答