Issue
This Content is from Stack Overflow. Question asked by Hamidou
I am new in FastAPI and having issues by facing 422 Unprocessable Entity error message. I want to post Data by using PHP client but I receive msg”:”field required”,”type”:”value_error.missing” for all the fields. I am using a PHP client.
I can succesfully post data by using http://127.0.0.1:8000/docs#/ POST method. Thanks for your help.
{“detail”:[{“loc”:[“body”,”cin_numcedeao”],”msg”:”field required”,”type”:”value_error.missing”},{“loc”:[“body”,”cin_prenom”],”msg”:”field required”,”type”:”value_error.missing”},{“loc”:[“body”,”cin_nom”],”msg”:”field required”,”type”:”value_error.missing”},{“loc”:[“body”,”cin_datenais”],”msg”:”field required”,”type”:”value_error.missing”},{“loc”:[“body”,”cin_lieunais”],”msg”:”field required”,”type”:”value_error.missing”},{“loc”:[“body”,”cin_sexe”],”msg”:”field required”,”type”:”value_error.missing”},{“loc”:[“body”,”cin_taille”],”msg”:”field required”,”type”:”value_error.missing”},{“loc”:[“body”,”cin_datedeliv”],”msg”:”field required”,”type”:”value_error.missing”},{“loc”:[“body”,”cin_dateexp”],”msg”:”field required”,”type”:”value_error.missing”},{“loc”:[“body”,”cin_centreenreg”],”msg”:”field required”,”type”:”value_error.missing”},{“loc”:[“body”,”cin_adresse”],”msg”:”field required”,”type”:”value_error.missing”},{“loc”:[“body”,”cel_numelec”],”msg”:”field required”,”type”:”value_error.missing”},{“loc”:[“body”,”cel_region”],”msg”:”field required”,”type”:”value_error.missing”},{“loc”:[“body”,”cel_depart”],”msg”:”field required”,”type”:”value_error.missing”},{“loc”:[“body”,”cel_arrond”],”msg”:”field required”,”type”:”value_error.missing”},{“loc”:[“body”,”cel_com”],”msg”:”field required”,”type”:”value_error.missing”},{“loc”:[“body”,”cel_lieuvote”],”msg”:”field required”,”type”:”value_error.missing”},{“loc”:[“body”,”cel_burvote”],”msg”:”field required”,”type”:”value_error.missing”},{“loc”:[“body”,”cel_nin”],”msg”:”field required”,”type”:”value_error.missing”},{“loc”:[“body”,”collect_cel_numelec”],”msg”:”field required”,”type”:”value_error.missing”}]}
Models
from sqlalchemy import Table, Column
from sqlalchemy.sql.sqltypes import Integer, String, DATETIME, Enum
from config.db import meta
parrain = Table(
'parrain', meta,
Column('id', Integer, primary_key=True),
Column('cin_numcedeao', String(25)),
Column('cin_prenom', String(100)),
Column('cin_nom', String(100)),
Column('cin_datenais', DATETIME),
Column('cin_lieunais', String(100)),
Column('cin_sexe', Enum('F', 'M')),
Column('cin_taille', Integer),
Column('cin_datedeliv', DATETIME),
Column('cin_dateexp', DATETIME),
Column('cin_centreenreg', String(255)),
Column('cin_adresse', String(255)),
Column('cel_numelec', String(20)),
Column('cel_region', String(20)),
Column('cel_depart', String(50)),
Column('cel_arrond', String(50)),
Column('cel_com', String(50)),
Column('cel_lieuvote', String(100)),
Column('cel_burvote', Integer),
Column('cel_nin', String(25)),
Column('collect_cel_numelec', String(20))
)
The schema
from datetime import datetime
from enum import Enum
from pydantic import BaseModel
class TypeEnum(str, Enum):
F: str = 'F'
M: str = 'M'
class Parrainage(BaseModel):
cin_numcedeao: str
cin_prenom: str
cin_nom: str
cin_datenais: datetime
cin_lieunais: str
cin_sexe: TypeEnum
cin_taille: int
cin_datedeliv: datetime
cin_dateexp: datetime
cin_centreenreg: str
cin_adresse: str
cel_numelec: str
cel_region: str
cel_depart: str
cel_arrond: str
cel_com: str
cel_lieuvote: str
cel_burvote: int
cel_nin: str
collect_cel_numelec: str
class Config:
orm_mode = True
The POST method
@parrainage.post("/parrain")
async def write_data(leparrain: Parrainage):
conn.execute(parrain.insert().values(
cin_numcedeao=leparrain.cin_numcedeao,
cin_prenom=leparrain.cin_prenom,
cin_nom=leparrain.cin_nom,
cin_datenais=leparrain.cin_datenais,
cin_lieunais=leparrain.cin_lieunais,
cin_sexe=leparrain.cin_sexe,
cin_taille=leparrain.cin_taille,
cin_datedeliv=leparrain.cin_datedeliv,
cin_dateexp=leparrain.cin_dateexp,
cin_centreenreg=leparrain.cin_centreenreg,
cin_adresse=leparrain.cin_adresse,
cel_numelec=leparrain.cel_numelec,
cel_region=leparrain.cel_region,
cel_depart=leparrain.cel_depart,
cel_arrond=leparrain.cel_arrond,
cel_com=leparrain.cel_com,
cel_lieuvote=leparrain.cel_lieuvote,
cel_burvote=leparrain.cel_burvote,
cel_nin=leparrain.cel_nin,
collect_cel_numelec=leparrain.collect_cel_numelec
))
return conn.execute(parrain.select()).fetchall()
My PHP client
<?php
$url = "http://127.0.0.1:8000/parrain";
$data_array =array(
"cin_numcedeao" => str_replace(' ', '',$_POST["choice_cin_numcedeao"]),
"cin_prenom" => $_POST["choice_cin_prenom"],
"cin_nom" => $_POST["choice_cin_nom"],
"cin_datenais" => $_POST["choice_cin_datenais"],
"cin_lieunais" => $_POST["choice_cin_lieunais"],
"cin_sexe" => $_POST["choice_cin_sexe"],
"cin_taille" => intval($_POST["choice_cin_taille"]),
"cin_datedeliv" => $_POST["choice_cin_datedeliv"],
"cin_dateexp" => $_POST["choice_cin_dateexp"],
"cin_centreenreg" => $_POST["choice_cin_centreenreg"],
"cin_adresse" => $_POST["choice_cin_adresse"],
"cel_numelec" => $_POST["choice_cel_numelec"],
"cel_region" => $_POST["choice_cel_region"],
"cel_depart" => $_POST["choice_cel_depart"],
"cel_arrond" => $_POST["choice_cel_arrond"],
"cel_com" => $_POST["choice_cel_com"],
"cel_lieuvote" => $_POST["choice_cel_lieuvote"],
"cel_burvote" => intval($_POST["choice_cel_burvote"]),
"cel_nin" => str_replace(' ', '',$_POST["choice_cel_nin"]),
"collect_cel_numelec" =>'11111111' //$_POST["collect_cel_numelec"]
);
$data = http_build_query($data_array);
$ch= curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $json_data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
header('Content-Type: text/html');
$resp = curl_exec($ch);
if($e = curl_error($ch)){
var_dump($e);
}
else{
$decoded = json_decode($resp); // return an object
foreach($decoded as $key => $val) {
//echo $key . ':' . $val . '<br>';
var_dump($key);
var_dump($val);
}
}
curl_close($ch);
?>
Solution
Thanks you, this post answer my question. Now it works.
$content = json_encode($data_array);
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HTTPHEADER,
array("Content-type: application/json"));
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $content);
$json_response = curl_exec($curl);
$status = curl_getinfo($curl, CURLINFO_HTTP_CODE);
if ( $status != 201 ) {
die("Error: call to URL $url failed with status $status, response $json_response, curl_error " . curl_error($curl) . ", curl_errno " . curl_errno($curl));
}
curl_close($curl);
$response = json_decode($json_response, true);
This Question was asked in StackOverflow by Hamidou and Answered by Hamidou It is licensed under the terms of CC BY-SA 2.5. - CC BY-SA 3.0. - CC BY-SA 4.0.