第三节: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://www.mzph.cn/news/703235.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【基于Ubuntu20.04的Autoware.universe安装过程】方案一:虚拟机 | 详细记录 | Vmware | 全过程图文 by.Akaxi

目录 一、Autoware.universe背景 二、虚拟机配置 三、Ubuntu20.04安装 四、GPU显卡安装 五、ROS2-Galactic安装 六、ROS2-dev-tools安装 七、rmw-implementation安装 八、pacmod安装 九、autoware-core安装 十、autoware universe dependencies安装 十一、安装pre-c…

[ai笔记12] chatGPT技术体系梳理+本质探寻

欢迎来到文思源想的ai空间&#xff0c;这是技术老兵重学ai以及成长思考的第12篇分享&#xff01; 这周时间看了两本书&#xff0c;一本是大神斯蒂芬沃尔弗拉姆学的《这就是ChatGPT》,另外一本则是腾讯云生态解决方案高级架构师宋立恒所写的《AI制胜机器学习极简入门》&#xf…

2024最新水果软件FL Studio21版本介绍与功能对比

FL Studio21前身为Fruity Loops&#xff0c;是一款由Image-Line公司开发的数字音频工作站&#xff08;DAW&#xff09;。它广泛用于音乐制作、编曲、混音和录音等领域。随着软件的不断更新迭代&#xff0c;FL Studio推出了多个版本&#xff0c;以满足不同用户的需求。 FL Studi…

数字化转型导师坚鹏:县区级政府数字化转型案例研究

县区级政府数字化转型案例研究 课程背景&#xff1a; 很多县区级政府存在以下问题&#xff1a; 不清楚县区级政府数字化转型的政务服务类成功案例 不清楚县区级政府数字化转型的社会管理类成功案例 不清楚县区级政府数字化转型的智慧城市类成功案例 课程特色&#xff…

【android】android studio生成aar包并在其他工程引用aar包(类/函数/activity)

android studio生成aar包并在其他工程引用aar包 arr引用和jar引用的区别1.ARR实现简单的JAVA/Kotlin类和函数调用过程1.1.新建需要打包成AAR的模块类1.2.新建需要调用的类1.3 创建 AAR 文件&#xff1a;1.4 AAR文件使用1.5 函数调用 2.实现AAR中activity的调用过程2.1 **特别说…

数字化转型导师坚鹏:地市级政府数字化转型案例研究

地市级政府数字化转型案例研究 课程背景&#xff1a; 很多地市级政府存在以下问题&#xff1a; 不清楚地市级政府数字化转型的政务服务类成功案例 不清楚地市级政府数字化转型的社会管理类成功案例 不清楚地市级政府数字化转型的智慧城市类成功案例 课程特色&#xff…

从软硬件以及常见框架思考高并发设计

目录 文章简介 扩展方式 横向扩展 纵向扩展 站在软件的层面上看 站在硬件的层面上看 站在经典的单机服务框架上看 性能提升的思考方向 可用性提升的思考方向 扩展性提升的思考方向 文章简介 先从整体&#xff0c;体系认识&#xff0c;理解高并发的策略&#xff0c;方…

【DAY04 软考中级备考笔记】数据结构基本结构和算法

数据结构基本结构和算法 2月25日 – 天气&#xff1a;晴 周六玩了一天&#xff0c;周天学习。 1. 什么是数据结构 数据结构研究的内容是一下两点&#xff1a; 如何使用程序代码把现实世界的问题信息化如何用计算机高效地处理这些信息从创造价值 2. 什么是数据 数据是信息的…

【教程】 iOS混淆加固原理篇

摘要 本文介绍了iOS应用程序混淆加固的缘由&#xff0c;编译过程以及常见的加固类型和逆向工具。详细讨论了字符串混淆、类名、方法名混淆、程序结构混淆加密等加固类型&#xff0c;并介绍了常见的逆向工具和代码虚拟化技术。 引言 在iOS开发中&#xff0c;为了保护应用程序…

Spring Boot 项目集成camunda流程引擎

使用camunda开源工作流引擎有&#xff1a;通过docker运行、使用springboot集成、部署camunda发行包、基于源代码编译运行等多种方式。 其中&#xff0c;通过源代码编译运行的方式最为复杂&#xff0c;具体参考&#xff1a;https://lowcode.blog.csdn.net/article/details/1362…

Redis高并发分布锁实战

Redis高并发分布锁实战 问题场景 场景一: 没有捕获异常 // 仅仅加锁 // 读取 stock15 Boolean ret stringRedisTemplate.opsForValue().setIfAbsent("lock_key", "1"); // jedis.setnx(k,v) // TODO 业务代码 stock-- stringRedisTemplate.delete(&quo…

《Docker 简易速速上手小册》第6章 Docker 网络与安全(2024 最新版)

文章目录 6.1 Docker 网络概念6.1.1 重点基础知识6.1.2 重点案例&#xff1a;基于 Flask 的微服务6.1.3 拓展案例 1&#xff1a;容器间的直接通信6.1.4 拓展案例 2&#xff1a;跨主机容器通信 6.2 配置与管理网络6.2.1 重点基础知识6.2.2 重点案例&#xff1a;配置 Flask 应用的…

《Docker 简易速速上手小册》第7章 高级容器管理(2024 最新版)

文章目录 7.1 容器监控与日志7.1.1 重点基础知识7.1.2 重点案例&#xff1a;监控 Flask 应用7.1.3 拓展案例 1&#xff1a;使用 ELK Stack 收集和分析日志7.1.4 拓展案例 2&#xff1a;使用集成监控工具 7.2 性能调优与资源限制7.2.1 重点基础知识7.2.2 重点案例&#xff1a;Fl…

Linux系统中前后端分离项目部署指南

目录 一.nginx安装以及字启动 解压nginx 一键安装4个依赖 安装nginx 启动 nginx 服务 开放端口号 并且在外部访问 设置nginx自启动 二.配置负载均衡 1.配置一个tomact 修改端口号 8081端口号 2.配置负载均衡 ​编辑 三.部署前后端分离项目 1.项目部署后端 ​编辑…

基于插件实现RabbitMQ“延时队列“

1.官网下载 在添加链接描述下载rabbitmq_delayed_message_exchange 插件,本文以v3.10.0为例 1.1.上传安装包 scp /Users/hong/资料/rabbitmq_delayed_message_exchange-3.10.0.ez root10.211.55.4:/usr/local/software1.2.将文件移入RabbitMQ的安装目录下的plugins目录 m…

Docker安装MS SQL Server并使用Navicat远程连接

MS SQL Server简介 Microsoft SQL Server&#xff08;简称SQL Server&#xff09;是由微软公司开发的关系数据库管理系统&#xff0c;它是一个功能强大、性能卓越的企业级数据库平台&#xff0c;用于存储和处理大型数据集、支持高效查询和分析等操作。SQL Server 支持广泛的应…

【PostgreSQL】Windows安装PostgreSQL数据库图文详细教程

Windows安装PostgreSQL数据库图文详细教程 一、前言二、PostgreSQL简介三、软件下载四、安装步骤4.1 安装向导4.2 选择安装目录4.3 选择组件4.4 选择数据存放目录4.5 选择密码4.6 选择端口号4.7 等待安装完成4.8 取消勾选&#xff0c;安装完成 五、启动教程5.1 搜索pgAdmin4&am…

常见的音频与视频格式

本专栏是汇集了一些HTML常常被遗忘的知识&#xff0c;这里算是温故而知新&#xff0c;往往这些零碎的知识点&#xff0c;在你开发中能起到炸惊效果。我们每个人都没有过目不忘&#xff0c;过久不忘的本事&#xff0c;就让这一点点知识慢慢渗透你的脑海。 本专栏的风格是力求简洁…

云原生应用测试:挑战与方法

&#x1f60f;作者简介&#xff1a;博主是一位测试管理者&#xff0c;同时也是一名对外企业兼职讲师。 &#x1f4e1;主页地址&#xff1a;【Austin_zhai】 &#x1f646;目的与景愿&#xff1a;旨在于能帮助更多的测试行业人员提升软硬技能&#xff0c;分享行业相关最新信息。…

我们为什么要做施耐德的代理商?做施耐德代理商有哪些好处?

品牌知名度与市场影响力&#xff1a;施耐德是一家全球知名的电气和数字化解决方案提供商&#xff0c;其产品和服务广泛应用于住宅、楼宇、数据中心、工业等领域。选择成为施耐德的代理商&#xff0c;可以利用其强大的品牌知名度和市场影响力&#xff0c;更容易获得消费者的信任…