持续创作,加速成长!这是我参与「掘金日新计划 · 12月更文挑战」的第4天,点击查看活动详情。
之前的文章中已经介绍过了python脚本自动网络巡检,但是,美中不足的是如果有新设备需要添加要修改源码,对于一些小白就比较困难了。于是就想开发一个带web页面巡检小工具
思路分析
- 网络设备都是比较重要的设备,不能随随便便就能访问到,需要登录到管理页面上才能进行操作
- 要有设备列表来存储要操作的设备,而且还有需要有添加和导入设备的功能。
- 把巡检结果导出巡检报告。
基本的功能如下,后续会根据自己的需求逐步完善。
技术栈
看起来功能比较简单,但是使用到的技术还是比较多的。本案例采用前后端分离,前端采用别人写好的框架tauri-pure-admin。 后端就是采用FastAPI
Tauri-pure-admin前端
项目地址如:
https://github.com/xiaoxian521/pure-admin-thin #项目地址
https://yiming_chang.gitee.io/pure-admin-doc/ #文档地址
选择这些前端开源的项目一定要选择活跃度比较高的,这样出现了问题可以第一时间得到帮助,并在选择一些有文档的这样方便了解整个项目的设计思路
FastAPI
项目文档地址:
https://fastapi.tiangolo.com/ #文档地址
登录功能实现
用户携带用户名和密码去客户端请求应用,过程中会有用户认证服务,验证通过会返回用户一个token, 用户拿着这个token就可以取去使用他想请求的东西了。
整体的登录流程如下:
1、接收前端提交的用户名和密码之后,先查询是否用该用户。
2、如果有该用户,在进行密码校验。校验成功后,返回token。否则,登录失败。
查询用户是否存在的核心代码如下:
async def has_user(username):
"""
通过用户名检索数据是否存在
:param username:
:return:
"""
return await UserDao.select({"username": username})
密码校验密码核心代码如下:
def verify_password(plain_password: str, hashed_password: str) -> bool:
'''
description: 验证明文密码 vs hash密码
:param plain_password: 明文密码
:param hashed_password: hash密码
:return:
'''
return pwd_context.verify(plain_password,hashed_password)
生成token核心代码如下:
def generate_token(username:str,expires_delta: Optional[timedelta] = None)->str:
'''
description: 生成Token
return Token
'''
to_encode = {"sub": username}.copy()
if expires_delta:
expire = datetime.utcnow() + expires_delta
else:
expire = datetime.utcnow() + timedelta(minutes=ACCESS_TOKEN_EXPIRE_MINUTES)
to_encode.update(dict(exp=expire))
encoded_jwt = jwt.encode(to_encode, SECRET_KEY, algorithm=ALGORITHM)
return encoded_jwt
接口地址函数核心代码如下:
from fastapi import APIRouter
from schemas import common as BaseSchema
from service import auth as AuthService
router = APIRouter(tags=["认证"])
LoginResult = BaseSchema.Response[BaseSchema.LoginResult]
@router.post("/login",summary="登录",response_model=LoginResult)
async def login(data:BaseSchema.LoginForm):
return await AuthService.user_login(data)
效果演示
如何获取项目
在WX搜索公众号"攻城狮成长日记",并回复发送“WEB”就能轻松的获取。