FastAPI —— 新建專案
阿新 • • 發佈:2022-04-11
fastapi 目錄結構
fastapi 解決跨域
"""apt app 後端服務啟動""" from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware from apt_app_service.apps.antifraud.app_views.files_views import antifraud_files_router from apt_app_service.apps.antifraud.app_views.urls_views import antifraud_urls_router from apt_app_service.apps.antifraud.app_views.result_views import antifraud_results_router from apt_app_service.apps.antifraud.app_views.feedback_views import antifraud_feedback_router app = FastAPI(title='apt 介面文件') app.add_middleware( CORSMiddleware, # 允許跨域的源列表,例如 ["http://www.example.org"] 等等,["*"] 表示允許任何源 allow_origins=["*"], # 跨域請求是否支援 cookie,預設是 False,如果為 True,allow_origins 必須為具體的源,不可以是 ["*"] allow_credentials=True, # 允許跨域請求的 HTTP 方法列表,預設是 ["GET"] allow_methods=["*"], # 允許跨域請求的 HTTP 請求頭列表,預設是 [],可以使用 ["*"] 表示允許所有的請求頭 # 當然 Accept、Accept-Language、Content-Language 以及 Content-Type 總之被允許的 allow_headers=["*"], # 可以被瀏覽器訪問的響應頭, 預設是 [],一般很少指定 expose_headers=["*"] # 設定瀏覽器快取 CORS 響應的最長時間,單位是秒。預設為 600,一般也很少指定 # max_age=1000 ) app.include_router(antifraud_files_router) app.include_router(antifraud_urls_router) app.include_router(antifraud_results_router) app.include_router(antifraud_feedback_router) # uvicorn main:app --host 0.0.0.0 --port 8000 --reload
fastapi 後臺任務
# 檢視函式 antifraud_urls_router = APIRouter( prefix="/antifraud/api/v1/urls", tags=["antifraud_urls"], responses={404: {"description": "Not found"}}, ) @antifraud_urls_router.post("/") async def upload_urls(background_tasks: BackgroundTasks, urls: List[str]): background_tasks.add_task(check_files, [uid, 'url', url])
# 後臺任務執行函式
async def check_files(files_list:list):
print('開始執行檢測非同步任務')
fastapi 路由分發
# 入口檔案:main.py """apt app 後端服務啟動""" from fastapi import FastAPI from apt_app_service.apps.antifraud.app_views.files_views import antifraud_files_router from apt_app_service.apps.antifraud.app_views.urls_views import antifraud_urls_router from apt_app_service.apps.antifraud.app_views.result_views import antifraud_results_router from apt_app_service.apps.antifraud.app_views.feedback_views import antifraud_feedback_router app = FastAPI(title='apt 介面文件') # 註冊路由 app.include_router(antifraud_files_router) app.include_router(antifraud_urls_router) app.include_router(antifraud_results_router) app.include_router(antifraud_feedback_router) # uvicorn main:app --host 0.0.0.0 --port 8000 --reload
# 檢視函式:files_views.py
from fastapi import APIRouter
from typing import List
from fastapi import File, UploadFile
# 例項化檢視函式中的子路由,
# 注意:不要想著把路由放到別的檔案,就和檢視函式放到一起,試了沒成功。這樣也挺好。
antifraud_files_router = APIRouter(
prefix="/antifraud/api/v1/files",
tags=["antifraud_files"],
responses={404: {"description": "Not found"}},
)
@antifraud_files_router.post("/")
async def upload_files(files: List[UploadFile] = File(...)):
"""上傳多個檔案"""