FastAPI POST 요청에 파일과 JSON 본문을 모두 추가하는 방법은 무엇입니까?
FastAPI는 API 구축을 위한 현대적이고 빠른(고성능) 웹 프레임워크입니다. Python 3.6을 기반으로 하며 API 개발을 보다 쉽고 효율적으로 수행할 수 있는 강력한 도구 및 기능 세트를 제공합니다. FastAPI의 주요 기능 중 하나는 파일 및 JSON 본문이 포함된 POST 요청을 포함하여 광범위한 요청 유형을 처리할 수 있도록 지원하는 것입니다.
이 기사에서는 FastAPI에서 파일과 JSON 본문을 모두 처리하는 방법을 살펴보겠습니다. FastAPI POST 요청. 이해와 구현을 단순화하기 위해 다양한 방법을 다루고 코드 예제를 제공합니다. 시작해 보세요!
FastAPI POST 요청에서 파일 및 JSON 본문 처리
FastAPI POST 요청에서 파일 및 JSON 본문을 처리하려면 다음 방법을 사용할 수 있습니다.
양식 및 파일 사용: 이 방법을 사용하면 경로 작업에서 여러 양식 매개변수를 선언할 수 있습니다. 그러나 요청에는 application/json 대신 application/x-www-form-urlencoded를 사용하여 인코딩된 본문이 있으므로 JSON으로 수신할 것으로 예상되는 본문 필드도 선언할 수 없습니다(양식에 파일이 포함된 경우 멀티파트로 인코딩됨). /form-data).
Pydantic 모델 및 종속성 사용: Pydantic 모델을 사용하여 매개변수화된 변수가 Base 클래스에 의존한다는 것을 엔드포인트에 알릴 수 있습니다. 이 답변에 설명된 대로 엔드포인트에서 쿼리 매개변수를 직접 정의할 수 있습니다.
본문 데이터를 단일 매개변수로 전달: 또 다른 옵션은 본문 데이터를 다음 형식의 단일 매개변수(양식 유형)로 전달하는 것입니다. JSON 문자열. 이를 위해서는 서버측에서 종속성 함수를 생성해야 합니다.
클래스 메서드와 함께 사용자 정의 클래스 사용: 또한 지정된 JSON 문자열을 문자열로 변환하는 데 사용되는 클래스 메서드와 함께 사용자 정의 클래스를 통합할 수도 있습니다. Python 사전은 Pydantic 모델에 대한 검증에 사용됩니다.
Base64 인코딩 파일 사용: 이 방법에는 파일 바이트를 base64 형식 문자열을 생성하고 이를 서버로 전송하려는 다른 데이터와 함께 JSON 객체에 추가합니다. 그러나 이 접근 방식은 파일 크기가 증가하고 인코딩 및 디코딩에 필요한 추가 리소스로 인해 크게 권장되지 않습니다.
코드 예제
몇 가지 코드 예제를 살펴보고 처리 방법을 살펴보겠습니다. 다양한 방법을 사용하여 FastAPI POST 요청의 파일 및 JSON 본문:
양식 및 파일:
from fastapi import Form, File, UploadFile, FastAPI from typing import List from fastapi.responses import HTMLResponse from fastapi.templating import Jinja2Templates app = FastAPI() templates = Jinja2Templates(directory="templates") @app.post("/submit") def submit( name: str = Form(...), point: float = Form(...), is_accepted: bool = Form(...), files: List[UploadFile] = File(...), ): return { "JSON Payload": {"name": name, "point": point, "is_accepted": is_accepted}, "Filenames": [file.filename for file in files], } @app.get("/", response_class=HTMLResponse) def main(request: Request): return templates.TemplateResponse("index.html", {"request": request})
Pydantic 모델 및 종속성을 사용하는 방법:
from fastapi import Form, File, UploadFile, Request, FastAPI, Depends from typing import List, Optional from fastapi.responses import HTMLResponse from pydantic import BaseModel from fastapi.templating import Jinja2Templates app = FastAPI() templates = Jinja2Templates(directory="templates") class Base(BaseModel): name: str point: Optional[float] = None is_accepted: Optional[bool] = False def checker(data: str = Form(...)): try: return Base.model_validate_json(data) except ValidationError as e: raise HTTPException( detail=jsonable_encoder(e.errors()), status_code=status.HTTP_422_UNPROCESSABLE_ENTITY, ) @app.post("/submit") def submit(base: Base = Depends(checker), files: List[UploadFile] = File(...)): return { "JSON Payload": base, "Filenames": [file.filename for file in files], } @app.get("/", response_class=HTMLResponse) def main(request: Request): return templates.TemplateResponse("index.html", {"request": request})
클래스 방법과 함께 사용자 정의 클래스를 사용하는 방법:
from fastapi import Form, File, UploadFile, FastAPI from typing import List from fastapi.responses import HTMLResponse from fastapi.templating import Jinja2Templates app = FastAPI() templates = Jinja2Templates(directory="templates") @app.post("/submit") def submit( name: str = Form(...), point: float = Form(...), is_accepted: bool = Form(...), files: List[UploadFile] = File(...), ): return { "JSON Payload": {"name": name, "point": point, "is_accepted": is_accepted}, "Filenames": [file.filename for file in files], } @app.get("/", response_class=HTMLResponse) def main(request: Request): return templates.TemplateResponse("index.html", {"request": request})
이러한 방법을 사용하면 특정 요구 사항에 따라 FastAPI POST 요청에서 파일 및 JSON 본문을 유연하게 처리할 수 있습니다. Pydantic 모델을 사용하여 데이터를 검증해야 하거나 단순히 JSON 문자열을 받아야 하는 경우 적합한 솔루션을 사용할 수 있습니다.
결론
이 기사에서는 두 파일을 모두 처리하는 다양한 방법을 살펴보았습니다. FastAPI POST 요청의 JSON 본문. 코드 예제와 자세한 설명을 제공함으로써 이러한 메서드를 최대한 간단하게 이해하고 구현하는 것을 목표로 했습니다. API를 개발할 때 요구사항과 선호도에 따라 가장 적절한 방법을 선택할 수 있습니다.
만약
위 내용은 FastAPI POST 요청에서 파일과 JSON 본문을 동시에 처리하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!