結合前期學習的過程,整理了乙份工程例項模板,在基於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...