Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimana untuk Membetulkan Ralat 422 FastAPI Semasa Menyiarkan Data JSON?

Bagaimana untuk Membetulkan Ralat 422 FastAPI Semasa Menyiarkan Data JSON?

Patricia Arquette
Patricia Arquetteasal
2024-12-17 01:24:24646semak imbas

How to Fix FastAPI's 422 Error When POSTing JSON Data?

Cara Menyelesaikan Ralat 422 FastAPI Semasa Menghantar Data JSON melalui Permintaan POST

Ralat 422 Entiti Tidak Dapat Diproses biasanya berlaku apabila muatan permintaan secara sintaksis adalah betul, tetapi ia tidak sepadan dengan jangkaan pelayan. Dalam kes khusus ini, anda menghadapi ralat ini kerana permintaan anda cuba menghantar data JSON ke titik akhir yang menjangkakan menerima data sebagai parameter pertanyaan.

Untuk menyelesaikan isu ini, terdapat berbilang pendekatan tersedia:

Pilihan 1: Gunakan Pydantic Model

  • Model Pydantic membolehkan anda menentukan struktur data yang dijangkakan untuk titik akhir. Coretan kod di bawah menggambarkan cara untuk menentukan titik akhir yang menerima data JSON yang diwakili sebagai model Pydantic:
from pydantic import BaseModel

class User(BaseModel):
    user: str

@app.post('/')
def main(user: User):
    return user

Pilihan 2: Gunakan Parameter Badan

  • Jika model Pydantic tidak diingini, anda boleh memanfaatkan parameter Badan. Benam parameter 'Body' membolehkan anda membenamkan badan permintaan sebagai sebahagian daripada tandatangan fungsi:
from fastapi import Body

@app.post('/')
def main(user: str = Body(..., embed=True)):
    return {'user': user}

Pilihan 3: Gunakan Jenis Dict

  • Kaedah lain, walaupun kurang disyorkan, adalah menggunakan jenis Dict untuk menentukan pasangan nilai kunci. Walau bagaimanapun, teknik ini tidak menyokong pengesahan tersuai:
from typing import Dict, Any

@app.post('/')
def main(payload: Dict[Any, Any]):
    return payload

Pilihan 4: Mengakses Terus Badan Permintaan

  • Objek Permintaan Starlette membenarkan terus akses kepada badan permintaan JSON yang dihuraikan menggunakan await request.json(). Walau bagaimanapun, pendekatan ini tidak menawarkan pengesahan tersuai dan memerlukan penggunaan async def untuk definisi titik akhir:
from fastapi import Request

@app.post('/')
async def main(request: Request):
    return await request.json()

Menguji Pilihan

Menggunakan Perpustakaan 'permintaan' Python:

import requests

url = 'http://127.0.0.1:8000/'
payload = {'user': 'foo'}
resp = requests.post(url=url, json=payload)
print(resp.json())

Menggunakan API Ambil JavaScript:

fetch('/', {
    method: 'POST',
    headers: {
        'Content-Type': 'application/json'
    },
    body: JSON.stringify({'user': 'foo'})
}).then(resp => resp.json())
    .then(data => {
        console.log(data);
    })
    .catch(error => {
        console.error(error);
    });

Dengan memilih dan melaksanakan salah satu pendekatan ini, anda boleh berjaya mengendalikan data JSON dalam titik akhir FastAPI anda, menyelesaikan ralat 422.

Atas ialah kandungan terperinci Bagaimana untuk Membetulkan Ralat 422 FastAPI Semasa Menyiarkan Data JSON?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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