Python: Flask的用户登录组件Flask-Login

用户登录组件Flask-Login

文档:

  • 中文:http://www.pythondoc.com/flask-login/
  • 英文:https://flask-login.readthedocs.io/en/latest/

目录

    • 简要说明
    • 基本的接口
    • 使用示例

简要说明

flask_login提供的方法

# 类
UserMixin     用户类#方法
login_user()  用户登入
logout_user() 登出功能# 变量
current_user  获取当前用户# 装饰器
@login_required 访问限制

基本的接口


# 1、实例化登录管理对象
login_manager = LoginManager(app)# 2、编写用户类
class User(UserMixin):pass# 3、加载用户, login_required 需要查询用户信息
@login_manager.user_loader
def user_loader(user_id: str):"""[注意] 这里的user_id类型是str"""return User()# 4、登录
@app.route('/login', methods=['GET', 'POST'])
def login():login_user(User())# 5、登出功能实现
@app.route('/logout')
@login_required
def logout():logout_user(User())# 6、访问控制
@app.route('/')
@login_required
def index():pass

使用示例

app.py

from flask import Flask, request, flash, render_template, redirect, url_for
from flask_login import UserMixin, LoginManager, login_required, logout_user, login_user, current_user# 创建 Flask 应用
app = Flask(__name__)app.secret_key = 'secret_key'  # 设置表单交互密钥# 模拟数据库查询
class UserService:users = [{'id': 1, 'username': 'tom', 'password': '1'},{'id': 2, 'username': 'jack', 'password': '2'}]@classmethoddef query_user_by_name(cls, username):for user in cls.users:if username == user['username']:return user@classmethoddef query_user_by_id(cls, user_id):for user in cls.users:if user_id == user['id']:return user# 1、实例化登录管理对象
login_manager = LoginManager()# 参数配置
login_manager.login_view = 'login'
login_manager.login_message_category = 'info'
login_manager.login_message = 'Access denied.'login_manager.init_app(app)  # 初始化应用# 2、编写用户类
class User(UserMixin):pass# 3、加载用户, login_required 需要查询用户信息
@login_manager.user_loader
def user_loader(user_id: str):"""[注意] 这里的user_id类型是str:param user_id::return:"""if UserService.query_user_by_id(int(user_id)) is not None:curr_user = User()curr_user.id = user_idreturn curr_user# 4、登录
@app.route('/login', methods=['GET', 'POST'])
def login():if request.method == 'POST':username = request.form.get('username')user = UserService.query_user_by_name(username)if user is not None and request.form['password'] == user['password']:curr_user = User()curr_user.id = user['id']# 通过Flask-Login的login_user方法登录用户login_user(curr_user)# 登录成功后重定向next_url = request.args.get('next')return redirect(next_url or url_for('index'))flash('Wrong username or password!')else:# GET 请求return render_template('login.html')# 5、登出功能实现
@app.route('/logout')
@login_required
def logout():# 通过Flask-Login的logout_user方法登出用户logout_user()return 'Logged out successfully!'# 6、访问控制
@app.route('/')
@login_required
def index():return 'index: ' + current_user.get_id()if __name__ == '__main__':app.run(debug=True)

视图文件 templates/login.html


<title>Logintitle>
<h1>Loginh1>{% with messages = get_flashed_messages() %}<div>{{ messages[0] }}div>
{% endwith %}<form action="{{ url_for('login') }}" method="POST"><p><input type="text" name="username" id="username" placeholder="Username"/>p><p><input type="password" name="password" id="password" placeholder="Password"/>p><p><input type="submit" name="submit"/>p>
form>

参考
Flask-Login 让实现登录功能变简单
第57天: Flask 用户登录 Flask-Login


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部