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

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

简要说明

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'}
    ]
    @classmethod
    def query_user_by_name(cls, username):
        for user in cls.users:
            if username == user['username']:
                return user
    @classmethod
    def 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_id
        return 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


<!DOCTYPE html>
<title>Login</title>
<h1>Login</h1>
{% 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>

参考

相关文章
|
4月前
|
SQL 数据库 开发者
Python中使用Flask-SQLAlchemy对数据库的增删改查简明示例
这样我们就对Flask-SQLAlchemy进行了一次简明扼要的旅程,阐述了如何定义模型,如何创建表,以及如何进行基本的数据库操作。希望你在阅读后能对Flask-SQLAlchemy有更深入的理解,这将为你在Python世界中从事数据库相关工作提供极大的便利。
480 77
|
8月前
|
安全 前端开发 数据库
Python 语言结合 Flask 框架来实现一个基础的代购商品管理、用户下单等功能的简易系统
这是一个使用 Python 和 Flask 框架实现的简易代购系统示例,涵盖商品管理、用户注册登录、订单创建及查看等功能。通过 SQLAlchemy 进行数据库操作,支持添加商品、展示详情、库存管理等。用户可注册登录并下单,系统会检查库存并记录订单。此代码仅为参考,实际应用需进一步完善,如增强安全性、集成支付接口、优化界面等。
|
10月前
|
JSON 前端开发 API
使用Python和Flask构建简易Web API
使用Python和Flask构建简易Web API
553 3
|
10月前
|
存储 API 数据库
使用Python和Flask构建简单的RESTful API
使用Python和Flask构建简单的RESTful API
197 2
|
10月前
|
JSON 关系型数据库 测试技术
使用Python和Flask构建RESTful API服务
使用Python和Flask构建RESTful API服务
456 2
|
10月前
|
JSON API 数据格式
使用Python和Flask构建简单的Web API
使用Python和Flask构建简单的Web API
|
10月前
|
开发框架 前端开发 JavaScript
利用Python和Flask构建轻量级Web应用的实战指南
利用Python和Flask构建轻量级Web应用的实战指南
586 2
|
10月前
|
JSON API 数据格式
如何使用Python和Flask构建一个简单的RESTful API。Flask是一个轻量级的Web框架
本文介绍了如何使用Python和Flask构建一个简单的RESTful API。Flask是一个轻量级的Web框架,适合小型项目和微服务。文章从环境准备、创建基本Flask应用、定义资源和路由、请求和响应处理、错误处理等方面进行了详细说明,并提供了示例代码。通过这些步骤,读者可以快速上手构建自己的RESTful API。
588 2
|
10月前
|
安全 数据库 C++
Python Web框架比较:Django vs Flask vs Pyramid
Python Web框架比较:Django vs Flask vs Pyramid
149 1
|
10月前
|
JSON API 数据格式
构建RESTful APIs:使用Python和Flask
构建RESTful APIs:使用Python和Flask
98 1

热门文章

最新文章

推荐镜像

更多