> 백엔드 개발 > 파이썬 튜토리얼 > FastAPI POST 요청에서 파일과 JSON 본문을 동시에 처리하는 방법은 무엇입니까?

FastAPI POST 요청에서 파일과 JSON 본문을 동시에 처리하는 방법은 무엇입니까?

Patricia Arquette
풀어 주다: 2024-12-26 20:20:11
원래의
265명이 탐색했습니다.

How to Handle File and JSON Body Simultaneously in a FastAPI POST Request?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿