使用FastAPI+SQLAlchemy+Redis+Celery 编写一个完整的用户登录验证API

使用PyQt5+FastAPI+SQLAlchemy+Redis+Celery做一个登录注册页(三)

本文将介绍用 PyQt5+FastAPI+SQLAlchemy+Redis+Celery 做的一个登录注册页,使用邮箱接收验证码本文介绍是前后端分离的实现方式,厚后端使用 FastAPI+SQLAlchemy+Redis+Celery,你可以将 PyQt5 改为 PySide2 以获得更宽松的开源协议

注意

本文由于涉及到的代码较多,将会是一个系列,会有多篇文章,且不在像 前后端未分离项目一样,做详细步骤描述,只写主要内容,详细的代码你需要自主查看 GItHub 上的公开仓库

系列文章索引

  1. 设计登录注册页面
  2. 添加代码运行登录注册页,并为其添加一些样式,和调用资源文件
  3. 使用 FastAPI+SQLAlchemy+Redis+Celery 编写API
  4. 使用 Pyqt5 GUI页面请求API,实现逻辑功能

环境

使用到的开源库如下

# requirements.txt
# The project is developed based on Windows Python3.8-64, version: 3.8.10
fastapi~=0.110.0
uvicorn~=0.25.0
SQLAlchemy~=2.0.23
pymysql~=1.1.0
email-validator
bcrypt~=4.0.1
python-jose~=3.3.0
python-multipart~=0.0.9
passlib[bcrypt]~=1.7.4
aioredis~=2.0.1
dependency-injector~=4.41.0
Alembic~=1.13.1
yagmail~=0.15.293
celery[redis]~=5.3.6
gevent~=23.9.1

结构

结构解释如下,方便你理解

--- QtLoginRegistrationServer
  |--- alembic               # 此目录是做数据库迁移的,迁移使用的是 Alembic
  |--- crud
     |--- __init__.py
     |--- crud.py            # 与数据库的交互,增删改查操作
  |--- db
     |--- __init__.py        # sqlalchemy 连接池
     |--- models.py          # 数据库模型
     |--- schemas.py         # Pydantic模型,用于关联ORM与数据校验
  |--- extension
     |--- __init__.py
     |--- celery_.py         # 分布式任务 celery 初始化
     |--- dependencies.py    # API:token
     |--- redis_.py          # 缓存 Redis 初始化
     |--- response.py        # 自定义响应体
  |--- internal
     |--- __init__.py
     |--- login_signup.py    # API:login,signup,send_email等
  |--- lib
     |--- __init__.py
     |--- custom.py          # 验证码
     |--- logger.py          # 日志
     |--- send_email.py      # 邮件模版
  |--- router
     |--- __init__.py
     |--- user.py            # API:create,list,update,delete等
  |--- static                # 静态资源:css,js,img等
  |--- tasks
     |--- __init__.py
     |--- tasks.py           # 分布式任务
  |--- alembic.ini           # 数据库迁移的配置,修改 sqlalchemy.url
  |--- main.py               # 主函数
  |--- setting.py            # 设置
  |--- startup.py            # 启动入口

特点

  1. 安全性:使用 OAuth2.0 身份验证规范,OAuth2 实现密码哈希与 Bearer JWT 令牌验证

  2. 缓存:依赖注入Redis,提供缓存服务,FastAPI 使用 Redis

  3. 分布式任务:使用celery,做耗时任务处理,如邮件发送任务,FastAPi Celery 的使用

  4. 数据库:使用sqlalchemy做数据操作

  5. API框架:使用FastAPI

运行截图

image

image

GitHub完整代码
本文章的原文地址
GitHub主页

posted @ 2024-03-22 16:57  星尘的博客  阅读(436)  评论(0编辑  收藏  举报