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

系列文章目录

第一节: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模型创建

#用户表
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创建

class Token:@classmethoddef 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_strb64_token = base64.urlsafe_b64encode(token.encode("utf-8"))return b64_token.decode("utf-8")@classmethoddef certify_token(cls, key, token):"""@Args:key: strtoken: str@Returns:boolean:param key::param token::return:"""if key is None:return Falsetoken_str = base64.urlsafe_b64decode(token).decode('utf-8')token_list = token_str.split(':')if len(token_list) != 2:return Falsets_str = token_list[0]if float(ts_str) < time.time():return Falseknown_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 failedreturn False# token certification successreturn True

4. 编写蓝图

代码如下(示例):

# 登录
@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_resultif not user.check_password(data["password"]):error_result = {'message': '用户密码错误!','result': {},'code': -1,'type': 'error',}return error_resultelse:token = Token.generate_token(str(user.uuid))session['username'] = user.namesession['role_code'] = user.role_codesession['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. 注册蓝图

import osfrom flask import Flask
from apps.config import config
from apps.exts import db
from flask_migrate import Migratedef create_app(test_config=None):# create and configure the appapp = Flask(__name__)app.config.from_object(config['default'])# ensure the instance folder existstry:os.makedirs(app.instance_path)except OSError:passfrom apps.api.auth import views as view_authapp.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://xiahunao.cn/news/2810104.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

UE5 C++ Widget练习 Button 和 ProgressBar创建血条

一. 1.C创建一个继承Widget类的子类&#xff0c; 命名为MyUserWidget 2.加上Button 和 UserWidget的头文件 #include "CoreMinimal.h" #include "Components/Button.h" #include "Blueprint/UserWidget.h" #include "MyUserWidget.genera…

kotlin与java的相互转换

Kotlin转java 将kotlin代码反编译成java Tools -> Kotlin -> Show Kotlin Bytecode 然后点击 【Decompile】 生成java代码 java转kotlin Code -> Convert Java File To Kotlin File

pytorch 用F.normalization的逆归一化如何操作

逆归一化的时候再把这个数乘回去就行了 magnitude a.norm(p2, dim1, keepdimTrue) # NEW atorch.nn.functional.normalize(a, p2, dim1) a_or a* magnitude # NEW print(a_or) Outputs: tensor([]1,2,3)

100天精通Python(实用脚本篇)——第117天:基于selenium实现反反爬策略之代码输入账号信息登录网站

文章目录 专栏导读1. 前言2. 实现步骤3. 基础补充4. 代码实战4.1 创建连接4.2 添加请求头伪装浏览器4.3 隐藏浏览器指纹4.4 最大化窗口4.5 启动网页4.6 点击密码登录4.7 输入账号密码4.8 点击登录按钮4.9 完整代码4.10 GIF动图展示 五、总结 专栏导读 &#x1f525;&#x1f5…

出现猫毛过敏后怎么养猫?性价比高的宠物空气净化器推荐

作为一名猫奴&#xff0c;我深知每天撸猫的快乐&#xff0c;但也深知鼻子受不了的痛苦。对于养宠家庭来说&#xff0c;猫咪的毛发无处不在&#xff0c;沙发、地板、衣服都是重灾区&#xff0c;不仅难以清理&#xff0c;而且可能会让呼吸道敏感的朋友过敏。为了解决除猫毛的问题…

迅推客媒体发布平台,让你的新闻轻松登上各大媒体

媒体发布稿件是个人或企业推广自己和产品的重要手段。良好的媒体发布过程可以给企业带来更多的曝光度和知名度&#xff0c;促进销售。然而&#xff0c;如何选择合适的新闻发布平台&#xff0c;如何在各大新闻媒体网站上发布新闻稿&#xff0c;是许多企业面临的问题。今天&#…

卷积神经网络 CNN

目录 卷积网络与传统网络的区别 参数共享 卷积神经网络整体架构 卷积操作的作用 卷积核的定义 卷积特征值计算方法 卷积层涉及的参数 边缘填充 ​编辑 卷积结果计算 池化层 整体网格架构 VGG网络架构 残差网络Resnet 卷积网络与传统网络的区别 卷积神经网络&#x…

免费分享一套SpringBoot+Vue实验室(预约)管理系统,帅呆了~~

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的SpringBootVue实验室(预约)管理系统 &#xff0c;分享下哈。 项目视频演示 【免费】SpringBootVue实验室(预约)管理系统 Java毕业设计_哔哩哔哩_bilibili【免费】SpringBootVue实验室(预约)管理系统 Java毕…

2024年青海省考公告已出,速速查收报名详细流程,千万不要错过报名时间哦

2024年青海公务员考试公告职位表已经发布&#xff0c;报名时间2月26日9:00至3月1日18:00&#xff0c; 以下是本次考试的重要时间安排&#xff1a; 报名时间&#xff1a;2024年2月26日9:00至3月1日18:00 缴费时间&#xff1a;2024年2月26日9:00至3月4日23:30 报名调剂时间&a…

【嵌入式——QT】SpinBox

QSpinBox用于整数的显示和输入&#xff0c;一般显示十进制数&#xff0c;也可以显示二进制、十六进制数&#xff0c;而且可以在显示框中增加前缀和后缀。QDoubleSpinBox用于浮点数的显示和输入&#xff0c;可以设置显示小数位数&#xff0c;也可以设置显示的前缀和后缀。 样式…

ZTE E8820V2重启偶现5G wifi丢失问题

使用ZTE E8820V2设备时,发现设备在多次重启过程中会出现5G wifi信号丢失的情况。 1. 现象日志 使用老毛子固件,具体丢失时会出现相关log: 2. 问题原因: GPIO#19 是 PCIE reset 外,GPIO#26 也要 reset。 3. 解决方法: E8820V2/rt-n56u/trunk$ git diff linux-3.4.x…

Spring的另一大的特征:AOP

目录 AOP &#xff08;Aspect Oriented Programming&#xff09;AOP 入门案例&#xff08;注解版&#xff09;AOP 工作流程——代理AOP切入点表达式AOP 通知类型AOP通知获取数据获取切入点方法的参数获取切入点方法返回值获取切入点方法运行异常信息 百度网盘分享链接输入密码数…

MySQL 篇-深入了解 DDL 语言(一)

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 MySQL 说明 2.0 DDL 语言 2.1 DDL 语言 - 定义数据库 2.1.1 创建数据库操作 2.1.2 查看数据库操作 2.1.3 使用数据库操作 2.1.4 删除数据库操作 2.2 DDL 语言 …

JAVA工程师面试专题-《Redis》篇

目录 一、基础 1、Redis 是什么 2、说一下你对redis的理解 3、Redis 为什么这么快&#xff1f; 4、项目中如何使用缓存&#xff1f; 5、为什么使用缓存&#xff1f; 6、Redis key 和value 可以存储最大值分别多是多少&#xff1f; 7、Redis和memcache有什么区别&#xf…

【自译】MIT麻省理工学院技术双月刊(The Bimonthly MIT Technology Review)125周年纪念词

上期 MIT Review 链接&#xff1a;创新版块概览&#xff08;二&#xff09; MIT Technology Review 125 原文 Happy Anniversary For 125 years, Technology Review has aimed to explain the “always new and ever more complex problems” we face. “To a community gr…

YOLOv9尝鲜测试五分钟极简配置

pip安装python包&#xff1a; pip install yolov9pip在https://github.com/WongKinYiu/yolov9/tree/main中下载好权重文件yolov9-c.pt。 运行下面代码&#xff1a; import yolov9model yolov9.load("yolov9-c.pt", device"cpu") # load pretrained or c…

c# 广度优先搜索(Breadth-First Search,BFS)

在这篇文章中我将讨论用于树和图的两种遍历机制之一。将使用 C# 示例介绍广度优先搜索 (BFS)。图是最具挑战性和最复杂的数据结构之一。 广度优先搜索的工作原理&#xff1a;广度优先搜索 &#xff08;BFS&#xff09;是一种探索树或图的方法。在 BFS 中&#xff0c;您首先探索…

教你 3 分钟用 Hexo 建立一个纯静态、高性能的个人博客

只要会使用命令行&#xff0c;执行简单的命令。那么&#xff0c;用 Hexo 建立一个个人博客的过程&#xff0c;称得上是轻松愉快且简单&#xff01; 我会以 Mac 操作系统作为例子&#xff0c;因为在 Mac 上实现这一切更为简单&#xff0c;因为 Mac 操作系统的命令行环境相对来说…

荣耀MWC发布AI使能的全场景战略

【2024年2月25日&#xff0c;巴塞罗那】荣耀在2024 MWC世界移动通信大会上正式发布了全新的AI使能的全场景战略&#xff0c;推出平台级AI赋能&#xff0c;以人为中心的跨操作系统体验和基于意图识别的全新人机交互&#xff0c;以及与全球合作伙伴合作的荣耀Magic6 Pro&#xff…

前端基础面试题(一)

摘要&#xff1a;最近&#xff0c;看了下慕课2周刷完n道面试题&#xff0c;记录下... 1.请说明Ajax、Fetch、Axios三者的区别 三者都用于网络请求&#xff0c;但维度不同&#xff1a; Ajax&#xff08;Asynchronous Javascript ang XML&#xff09;&#xff0c;是一种在不重新…