目錄
- FastAPI學習記錄
- 項目結構
- 部分接口/代碼展示
- 感受
- 全部代碼
FastAPI學習記錄
fastapi已經學習有一段時間,今天抽時間簡單整理下。
官網介紹:
FastAPI 是一個用于構建 API 的現代、快速(高性能)的 web 框架,使用 Python 3.6+ 并基于標準的 Python 類型提示。
-
快速:可與 NodeJS 和 Go 并肩的極高性能(歸功于 Starlette 和 Pydantic)最快的 Python web 框架之一。
-
高效編碼:提高功能開發速度約 200% 至 300%。*
-
更少 bug:減少約 40% 的人為(開發者)導致錯誤。* 智能:極佳的編輯器支持。處處皆可自動補全,減少調試時間。
-
簡單:設計的易于使用和學習,閱讀文檔的時間更短。 簡短:使代碼重復最小化。通過不同的參數聲明實現豐富功能。bug 更少。
-
健壯:生產可用級別的代碼。還有自動生成的交互式文檔。 標準化:基于(并完全兼容)API 的相關開放標準:OpenAPI
(以前被稱為Swagger) 和 JSON Schema。
如果還沒學過的同學可先了解,如 pydantic、fastapi、sqlalchemy、請求/響應模型等有一定認識。
以下分享本次所學習的資料:
本次學習視頻(推薦):https://www.imooc.com/video/22971
fastapi:https://fastapi.tiangolo.com/zh
pydantic 官方文檔:https://docs.pydantic.dev
pydantic 支持所有的類型:https://docs.pydantic.dev/usage/types
項目結構
fastapi基本大同小異
如果是多個應用則可以再往上提一層,如 admin 下的,app下的等等
部分接口/代碼展示
僅僅剛開始學習,增刪查改目前只涉及,增、查,未有刪改相信也是會很快上手的。
個人感覺主要是 pydantic schemas 這塊要梳理清楚,增刪查改該怎樣編排,使得在編碼時更方便。
全部代碼將放在最后!
接口文檔打開鏈接:http://127.0.0.1:8000/docs/ppl/index
from fastapi import APIRouter, Depends, status
from sqlalchemy.orm import Session
from fastapi.responses import JSONResponse
from models.database import Base, engine, get_db
from schemas import schema_user
from cruds import crud_userapi_user = APIRouter()
Base.metadata.create_all(bind=engine)@api_user.post('/add', response_model=schema_user.GetUser)
def add_user(user: schema_user.CreateUser, work: schema_user.CreateWork, db: Session = Depends(get_db)):if crud_user.get_user(db, phone=user.phone):return JSONResponse(status_code=status.HTTP_400_BAD_REQUEST, content={'code': 0,'message': '該手機號已被注冊'})return crud_user.add_user(db, user, work)@api_user.get('/get', response_model=schema_user.GetUser)
def get_user(id: int = None, phone: int = None, db: Session = Depends(get_db)):user = crud_user.get_user(db, id, phone)if not user: return JSONResponse(status_code=status.HTTP_200_OK, content={})return user@api_user.get('/list', response_model=list[schema_user.GetUser])
def list_user(skip: int = 1, limit: int = 10, db: Session = Depends(get_db)):user_list = crud_user.get_user(db, skip=skip, limit=limit)if not user_list: return JSONResponse(status_code=status.HTTP_200_OK, content=[])return user_list
感受
值得學習,pydantic 真不錯,但是類似編排是比較麻煩了點,可能是本人代碼量還不夠、不熟練等因素,不過也準備能開始無腦增刪查改!!!還需要學習jwt鑒權、中間件、redis,異步后臺任務、日志記錄等等。
docs接口文檔真不賴,生成可視化文檔、標注等,直接能調試…方便!
全部代碼
右鍵點我(gitee)