第三节:Vben Admin登录对接后端login接口

news/2024/7/10 2:34:13 标签: anti-design-vue, vue, 前端框架, flask, python

系列文章目录

第一节:Vben Admin介绍和初次运行
第二节:Vben Admin 登录逻辑梳理和对接后端准备


文章目录

  • 系列文章目录
  • 前言
  • 一、Flask项目介绍
  • 二、使用步骤
    • 1.User模型创建
    • 2.迁移模型
    • 3. Token创建
    • 4. 编写蓝图
    • 5. 注册蓝图
  • 三. 测试登录
  • 总结


前言

上一节,我们梳理的Vben Admin登录功能接口的逻辑,本节开始正式开启后端的开发


一、Flask项目介绍

后端我们采用Python的Flask项目,Flask-SQLAlchemy管理数据库模型,Flask-Migrate进行模型迁移。
参考版本如下:
Flask3.0.2
Flask-SQLAlchemy
3.1.1

二、使用步骤

1.User模型创建

python">#用户表
class User(db.Model):
    __tablename__ = 'user'
    id = db.Column(db.Integer,primary_key=True,autoincrement=True)
    uuid = db.Column(db.String(150),unique=True,nullable=False)
    name = db.Column(db.String(50),unique=True,nullable=False)
    pwd = db.Column(db.String(255),nullable=False)
    email = db.Column(db.String(100),nullable=False)
    role_code = db.Column(db.String(100),nullable=False)
    status = db.Column(db.SmallInteger,default='1')  #状态 1:有效 0:无效

    def __repr__(self):
        return "<User %r>" % self.name

2.迁移模型

在这里插入图片描述

3. Token创建

python">class Token:
    @classmethod
    def generate_token(cls, key, expire=43200):
        """
        @Args:
            key: str (用户给定的key,需要用户保存以便之后验证token,每次产生token时的key 都可以是同一个key)
            expire: int(最大有效时间,单位为s)
        @Return:
            state: str
        :param key:
        :param expire:
        :return:
        """
        ts_str = str(time.time() + expire)
        ts_byte = ts_str.encode("utf-8")
        sha1_tshex_str = hmac.new(key.encode("utf-8"), ts_byte, 'sha1').hexdigest()
        token = ts_str + ':' + sha1_tshex_str
        b64_token = base64.urlsafe_b64encode(token.encode("utf-8"))

        return b64_token.decode("utf-8")

    @classmethod
    def certify_token(cls, key, token):
        """
        @Args:
            key: str
            token: str
        @Returns:
            boolean
        :param key:
        :param token:
        :return:
        """
        if key is None:
            return False
        token_str = base64.urlsafe_b64decode(token).decode('utf-8')
        token_list = token_str.split(':')
        if len(token_list) != 2:
            return False
        ts_str = token_list[0]
        if float(ts_str) < time.time():
            return False
        known_sha1_tsstr = token_list[1]
        sha1 = hmac.new(key.encode("utf-8"), ts_str.encode('utf-8'), 'sha1')
        calc_sha1_tsstr = sha1.hexdigest()
        if calc_sha1_tsstr != known_sha1_tsstr:
            # token certification failed
            return False
        # token certification success
        return True

4. 编写蓝图

代码如下(示例):

python"># 登录
@bp.route('/login',methods=['GET','POST'])
def login():
    data = request.get_json()
    username = data['username']
    password = data['password']
    user = User.query.filter_by(name=data["username"]).first()
    if user is None:
        error_result = {
            'message': '用户不存在!',
            'result': {},
            'code': -1,
            'type': 'error',
        }
        return error_result
    if not user.check_password(data["password"]):
        error_result = {
            'message': '用户密码错误!',
            'result': {},
            'code': -1,
            'type': 'error',
        }
        return error_result
    else:
        token = Token.generate_token(str(user.uuid))
        session['username'] = user.name
        session['role_code'] = user.role_code
        session['uuid'] = str(user.uuid)
        success_result = {
            'message': '',
            'result': {
                'userId': user.uuid,
                'username': user.name,
                'token': token,
                'realName':''
            },
            'code': 0,
            'type': 'success',
        }
        return success_result

5. 注册蓝图

python">import os

from flask import Flask
from apps.config import config
from apps.exts import db
from flask_migrate import Migrate

def create_app(test_config=None):
    # create and configure the app
    app = Flask(__name__)

    app.config.from_object(config['default'])

    # ensure the instance folder exists
    try:
        os.makedirs(app.instance_path)
    except OSError:
        pass


    from apps.api.auth import views as view_auth

    
    app.register_blueprint(view_auth.bp,url_prefix="/api/auth")

    # a simple page that says hello
    @app.route('/hello')
    def hello():
        return 'Hello, World!'

    
    db.init_app(app)
    migrate = Migrate(app, db)    

    return app

三. 测试登录

重写运行Vben Admin,再次尝试登录。
在这里插入图片描述
哎,还是404呢,经过排查,原理上次,我们前端有一个地方遗漏了,如下图,vite.config.ts指向的我们的后端地址好像不太对
在这里插入图片描述
这里我们改成我们后端真实数据
在这里插入图片描述
再次尝试登录,还是404? 继续排查。。。
原来如此,我们后端注册的蓝图地址是/api/auth + /login,而前端请求地址是/api/login,我们修改下第一节介绍的src/api/sys/user.ts 里面的Api.Login地址:
在这里插入图片描述
我们再次尝试登录。
在这里插入图片描述
这次我们发现我们的login接口已经成功返回了,但是还是没登录上去,这里我们看到请求了login接口后,VbenAdmin马上又请求了/api/getUserInfo接口,这个接口我们还没有编写。
通过Flask的输出,也可以看到
在这里插入图片描述
看来要完成登录,我们还需要完成/api/getUserInfo接口的编写


总结

本节,我们已经开启的后端的开发,因为是主要介绍Vben Admin的登录逻辑,所以Flask开发这里只截取了部分主要代码。我们目前已经完成了登录接口,但是要进入主页,还需要完成/api/getUserInfo接口,下一节,我们来看看这个接口的逻辑和如何开发。
码字不易,请大家多多点赞,谢谢支持!


http://www.niftyadmin.cn/n/5393595.html

相关文章

【软件设计模式之迭代器与组合模式】

文章目录 前言一、迭代器模式1. 迭代器模式定义2. 应用场景3. 实现示例 二、组合模式1. 组合模式定义2. 应用场景3. 实现示例 三、迭代器与组合模式的结合应用1. 综合应用场景2. 结合使用的优势 总结 前言 迭代器模式主要用于顺序访问集合中的元素&#xff0c;而不需要了解底层…

数据分析---Python与sql

目录 Python的pandas,如何实现SQL中的leftjoinPython的pandas,如何实现SQL中的unionPython的pandas,如何实现类似SQL中的where进行限制Python的pandas,如和实现SQL中的group byPython的pandas,如何删除某一列Python的pandas,如何实现SQL中的leftjoin 在Python的pandas库中…

springboot221酒店管理系统

酒店管理系统 摘 要 时代的发展带来了巨大的生活改变&#xff0c;很多事务从传统手工管理转变为自动管理。自动管理是利用科技的发展开发的新型管理系统&#xff0c;这类管理系统可以帮助人完成基本的繁琐的反复工作。酒店是出门的必需品&#xff0c;无论出差还是旅游都需要酒…

挑战杯 基于机器视觉的二维码识别检测 - opencv 二维码 识别检测 机器视觉

文章目录 0 简介1 二维码检测2 算法实现流程3 特征提取4 特征分类5 后处理6 代码实现5 最后 0 简介 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基于机器学习的二维码识别检测 - opencv 二维码 识别检测 机器视觉 该项目较为新颖&#xff0c;适合作为竞赛课…

关于螺栓的基本拧紧技术了解多少——SunTorque智能扭矩系统

螺栓是机械中常见的紧固件之一&#xff0c;用于将两个或多个部件连接在一起&#xff0c;并保持它们之间的紧密配合。拧紧螺栓是一项基本的技术&#xff0c;但在实际操作中&#xff0c;许多工人并不了解正确的拧紧方法&#xff0c;从而导致螺栓松动、连接失效等问题的出现。因此…

【人脸朝向识别与分类预测】基于PNN神经网络

课题名称&#xff1a;基于PNN神经网络的人脸朝向识别分类 版本日期&#xff1a;2024-02-20 运行方式&#xff1a;直接运行PNN0503.m文件 代码获取方式&#xff1a;私信博主或 QQ:491052175 模型描述&#xff1a; 采集到一组人脸朝向不同角度时的图像&#xff0c;图像来自不…

Spark之【基础介绍】

Spark最初是由美国伯克利大学AMP实验室在2009年开发&#xff0c;Spark时基于内存计算的大数据并行计算框架&#xff0c;可以用于构建大型的、低延迟的数据分析应用程序。 Spark是当今大数据领域最活跃、最热门、最高效的大数据通用计算平台之一。 Spark的特点 运行速度快 &am…

287.【华为OD机试真题】字符串序列判定(贪心算法—JavaPythonC++JS实现)

🚀点击这里可直接跳转到本专栏,可查阅顶置最新的华为OD机试宝典~ 本专栏所有题目均包含优质解题思路,高质量解题代码(Java&Python&C++&JS分别实现),详细代码讲解,助你深入学习,深度掌握! 文章目录 一. 题目-字符串序列判定二.解题思路三.题解代码Python题…