用户登录功能是 Web 系统一个基本功能,是为用户提供更好服务的基础,在 Flask 框架中怎么做用户登录功能呢?今天学习一下 Flask 的用户登录组件 Flask-Login
Python 之所以如此强大和流行,除了本身易于学习和功能丰富之外,最重要的是因为各种类库和组件,可以说没有 Python 做不了的事情,只有不知道的组件。
之所以选择 Flask-Login,是因为它基于Session,适合做有 UI 交互的用户登录,用我们学习了的 Flask 表单做演示,更容易理清用户登录的流程
用户登录说明
Flask-Login 和其他 Flask 组件并没有太大区别,有必要开始之前了解下用户登录的步骤:
登录:用户提供登录凭证(如用户名和密码)提交给服务器
建立会话:服务器验证用户提供的凭证,如果通过验证,则建立会话( Session ),并返回给用户一个会话号( Session id )
验证:用户在后续的交互中提供会话号,服务器将根据会话号( Session id )确定用户是否有效
登出:当用户不再与服务器交互时,注销与服务器建立的会话
依据以上步骤,我们设计一个应用场景,作为实现:
提供一个主页,需要登录才能访问
如果没有登录,跳转到登录页面,登录成功再跳回
登录成功后,可以点击登出退出登录
在登录页面提供注册连接,点击后跳转到注册页面
注册完成后,跳转到登录页面
初始化
先实例化 login_manager 对象,然后用它来初始化应用:
from flask importFlaskfrom flask_login importLoginManager#...
app = Flask(__name__) #创建 Flask 应用
app.secret_key= 'abc' #设置表单交互密钥
login_manager= LoginManager() #实例化登录管理对象
login_manager.init_app(app) #初始化应用
login_manager.login_view = 'login' #设置用户登录视图函数 endpoint
表单交互时,所以要设置secret_key,以防跨域攻击( CSRF )
登录管理对象 login_manager 的 login_view 属性,指定登录页面的视图函数 (登录页面的 endpoint),即验证失败时要跳转的页面,这里设置为登录页
用户模块
用户数据
要做用户验证,需要维护用户记录,为了方便演示,使用一个全局列表 USERS 来记录用户信息,并且初始化了两个用户信息:
from werkzeug.security importgenerate_password_hash#...
USERS =[
{"id": 1,"name": 'lily',"password": generate_password_hash('123')
},
{"id": 2,"name": 'tom',"password": generate_password_hash('123')
}
]
用户信息只包含最基本的信息:
name 为登录用户名</