FastAPI 工程管理 四 工程示例

2022-09-15 10:00:13 字數 2135 閱讀 5387

結合前期學習的過程,整理了乙份工程例項模板,在基於fastapi框架的前提下,參考了flask的一些業務邏輯和檔案配置。

在測試環境和生產環境都經過了實際測試,個人認為可以實際應用於正式環境了。

工程目錄結構

│ ├── auth

#jwt authorization

│ ├── models #

database models

│ ├── routers #

api routers

│ └── util #

utility

│ ├── __init__.py #

entry file

│ ├── config.py #

project config

│ ├── database.py #

database

├── deploy #

deploy tools

│ ├── gunicorn_fast.service #

service sample

│ ├── test_user.sql #

user db sample

├── gunicorn.py #

gunicorn config

├── local.py #

for development run

├── run.py #

for production run

鑑權核心流程

"""在這個函式裡統一對訪問做許可權token校驗。

1、如果是使用者註冊、登陸,那麼不做token校驗,由路徑操作函式具體驗證

2、如果是其他操作,則需要從header或者cookie中取出token資訊,解析出內容

然後對使用者身份進行驗證,如果使用者不存在則直接返回

如果使用者存在則將使用者資訊附加到request中,這樣在後續的路徑操作函式中可以直接使用。

"""start_time =time.time()

#print(request.url)

#print(request.url.path)

if request.url.path == '

/login

'or request.url.path == '

/register':

logger.info(

'no jwt verify.')

else

: logger.info(

'jwt verify.')

result =auth.identifyall(request)

if result['

status

'] and result['

data']:

user = result['

data

']['

user']

logger.info(

'jwt verify success. user: %s

' %user.username)

#state中記錄使用者基本資訊

request.state.user =user

else

:

return jsonresponse(content=result)

response =await call_next(request)

process_time = time.time() -start_time

response.headers[

"x-process-time

"] =str(process_time)

return response

在路徑操作函式中,可以認為已經通過鑑權,並且可以從request.state.user中直接取出使用者基礎資訊。

這樣既方便了許可權的統一控制,又減少了**重複。

FastAPI 工程管理 一 工程目錄管理

我們在構建複雜應用的時候,通常會對工程目錄進行合理組織。fastapi提供了便利的工具來對應用進行結構化管理,這基本等同於flask的blueprints功能。init py main.py routers init py items.py users.py fastapi可以基於apirouter...

Makefile工程管理

1 makefile用途 make的工作主要依賴於乙個叫makefile的檔案。makefile檔案描述了整個程式的編譯,鏈結等規則。其中包括 工程中的哪些原始檔需要編譯以及如何編譯,如何最後產生我們想要的可執行檔案。2 makefile中最重要的組成部分是規則 規則 用於說明如何生成目標檔案,規則...

RTT工程管理

一 rtt工程管理 rtt採用scons管理工程。本次安裝版本 python 2.7.3.1.exe,python 2.7.11.msi,scons 2.3.1 setup.exe 安裝完成後,需要在環境變數中新增path c python27 scripts c python27 可用cmd下sc...