1. 程式人生 > 其它 >FastAPI —— 新建專案

FastAPI —— 新建專案

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(...)):
    """上傳多個檔案"""