Rumah > pembangunan bahagian belakang > Tutorial Python > Bagaimana Mengendalikan Fail dan Badan JSON Secara serentak dalam Permintaan POST FastAPI?

Bagaimana Mengendalikan Fail dan Badan JSON Secara serentak dalam Permintaan POST FastAPI?

Patricia Arquette
Lepaskan: 2024-12-26 20:20:11
asal
265 orang telah melayarinya

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

Bagaimana untuk menambah kedua-dua fail dan isi JSON dalam permintaan FastAPI POST?

FastAPI ialah rangka kerja web moden, pantas (berprestasi tinggi) untuk membina API. Ia berdasarkan Python 3.6 dan menyediakan set alat dan ciri yang berkuasa untuk menjadikan pembangunan API lebih mudah dan cekap. Salah satu ciri utama FastAPI ialah sokongannya untuk mengendalikan pelbagai jenis permintaan, termasuk permintaan POST dengan fail dan badan JSON.

Dalam artikel ini, kami akan meneroka cara mengendalikan kedua-dua fail dan badan JSON dalam permintaan FastAPI POST. Kami akan merangkumi kaedah yang berbeza dan menyediakan contoh kod untuk memudahkan pemahaman dan pelaksanaan. Mari mulakan!

Mengendalikan Fail dan JSON Body dalam FastAPI POST Request

Untuk mengendalikan fail dan badan JSON dalam permintaan FastAPI POST, anda boleh menggunakan kaedah berikut:

Menggunakan Borang dan Fail: Kaedah ini membolehkan anda mengisytiharkan berbilang parameter Borang dalam operasi laluan. Walau bagaimanapun, anda juga tidak boleh mengisytiharkan medan Badan yang anda jangkakan akan terima sebagai JSON kerana permintaan akan mempunyai badan dikodkan menggunakan application/x-www-form-urlencoded dan bukannya application/json (apabila borang termasuk fail, ia dikodkan sebagai berbilang bahagian /form-data).

Menggunakan Model dan Ketergantungan Pydantic: Anda boleh menggunakan model Pydantic untuk memaklumkan titik akhir bahawa pembolehubah parameter bergantung pada kelas Base. Anda boleh mentakrifkan parameter pertanyaan secara langsung dalam titik akhir seperti yang ditunjukkan dalam jawapan ini.

Melalui Data Badan sebagai Parameter Tunggal: Pilihan lain ialah menghantar data badan sebagai parameter tunggal (jenis Borang) dalam bentuk rentetan JSON. Untuk itu, anda perlu mencipta fungsi pergantungan pada bahagian pelayan.

Menggunakan Kelas Tersuai dengan Kaedah Kelas: Anda juga boleh menggabungkan kelas tersuai dengan kaedah kelas yang digunakan untuk mengubah rentetan JSON yang diberikan kepada Kamus Python, yang kemudiannya digunakan untuk pengesahan terhadap model Pydantic.

Menggunakan Fail Berkod Base64: Kaedah ini melibatkan penukaran bait fail ke dalam rentetan format base64 dan menambahkannya pada objek JSON, bersama-sama dengan data lain yang anda mungkin mahu hantar ke pelayan. Walau bagaimanapun, pendekatan ini tidak begitu disyorkan kerana saiz fail yang lebih besar dan sumber tambahan yang diperlukan untuk pengekodan dan penyahkodan.

Contoh Kod

Mari kita terokai beberapa contoh kod untuk menunjukkan cara mengendalikan fail dan badan JSON dalam permintaan FastAPI POST menggunakan kaedah berbeza:

Kaedah Menggunakan Borang dan Fail:

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})
Salin selepas log masuk
Salin selepas log masuk

Kaedah Menggunakan Model Pydantic dan Ketergantungan:

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})
Salin selepas log masuk

Kaedah Menggunakan Kelas Tersuai dengan Kaedah Kelas:

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})
Salin selepas log masuk
Salin selepas log masuk

Dengan kaedah ini, anda mempunyai fleksibiliti untuk mengendalikan fail dan badan JSON dalam permintaan FastAPI POST mengikut keperluan khusus anda. Sama ada anda perlu mengesahkan data menggunakan model Pydantic atau hanya menerima rentetan JSON, terdapat penyelesaian yang sesuai tersedia.

Kesimpulan

Dalam artikel ini, kami telah meneroka pelbagai kaedah untuk mengendalikan kedua-dua fail dan badan JSON dalam permintaan FastAPI POST. Dengan menyediakan contoh kod dan penjelasan terperinci, kami telah menyasarkan untuk menjadikan pemahaman dan pelaksanaan kaedah ini semudah mungkin. Semasa anda membangunkan API anda, anda boleh memilih kaedah yang paling sesuai berdasarkan keperluan dan keutamaan anda.

Jika

Atas ialah kandungan terperinci Bagaimana Mengendalikan Fail dan Badan JSON Secara serentak dalam Permintaan POST FastAPI?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan