使用PyQt5+FastAPI+SQLAlchemy+Redis+Celery做一個登入註冊頁(三)
本文將介紹用 PyQt5+FastAPI+SQLAlchemy+Redis+Celery 做的一個登入註冊頁,使用郵箱接收驗證碼,本文介紹是前後端分離的實現方式,厚後端使用 FastAPI+SQLAlchemy+Redis+Celery,你可以將 PyQt5 改為 PySide2 以獲得更寬鬆的開源協議
注意
本文由於涉及到的程式碼較多,將會是一個系列,會有多篇文章,且不在像 前後端未分離專案一樣,做詳細步驟描述,只寫主要內容,詳細的程式碼你需要自主檢視 GItHub 上的公開倉庫
系列文章索引
- 設計登入註冊頁面
- 新增程式碼執行登入註冊頁,併為其新增一些樣式,和呼叫資原始檔
- 使用 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 # 啟動入口
特點
-
安全性:使用
OAuth2.0
身份驗證規範,OAuth2
實現密碼雜湊與Bearer JWT
令牌驗證 -
快取:依賴注入
Redis
,提供快取服務,FastAPI 使用 Redis -
分散式任務:使用
celery
,做耗時任務處理,如郵件傳送任務,FastAPi Celery 的使用 -
資料庫:使用
sqlalchemy
做資料操作 -
API框架:使用
FastAPI
GitHub完整程式碼
本文章的原文地址
GitHub主頁