使用FastAPI+SQLAlchemy+Redis+Celery 編寫一個完整的使用者登入驗證API

星尘的博客發表於2024-03-22

使用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

環境

使用到的開源庫如下

# 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

GitHub完整程式碼
本文章的原文地址
GitHub主頁

相關文章