Menangani Form Data di FastAPI
Jika Anda ingin menangani form data di FastAPI (bukan JSON), Anda perlu menggunakan Form dari fastapi. Form data biasanya dikirim dari HTML form dengan Content-Type: application/x-www-form-urlencoded atau multipart/form-data.
Berikut adalah panduan lengkap untuk menangani form data di FastAPI:
1. Menangani Form Data Dasar
Untuk menangani form data, Anda perlu mengimpor Form dari fastapi dan menggunakannya di parameter fungsi.
Contoh:
from fastapi import FastAPI, Form
app = FastAPI()
@app.post("/login/")
async def login(username: str = Form(...), password: str = Form(...)):
return {"username": username}
Penjelasan:
Form(...): Digunakan untuk mengambil data dari form. Tanda...menunjukkan bahwa field tersebut wajib diisi.username: str = Form(...): Menerima inputusernamedari form data.password: str = Form(...): Menerima inputpassworddari form data.
Cara Menguji:
Jalankan aplikasi:
uvicorn main:app --reloadBuka Swagger UI di
http://127.0.0.1:8000/docs.Cari endpoint POST
/login/dan coba kirim form data:- username:
john - password:
secret
- username:
Anda akan melihat respons seperti:
{
"username": "john"
}
2. Menangani Form Data dengan Optional Field
Jika ada field yang opsional (tidak wajib diisi), Anda dapat memberikan nilai default None.
Contoh:
from fastapi import FastAPI, Form
app = FastAPI()
@app.post("/login/")
async def login(username: str = Form(...), password: str = Form(...), remember_me: bool = Form(False)):
return {"username": username, "remember_me": remember_me}
Penjelasan:
remember_me: bool = Form(False): Fieldremember_mebersifat opsional dengan nilai defaultFalse.
Cara Menguji:
- Kirim form data dengan atau tanpa field
remember_me.
3. Menangani File Upload dengan Form Data
Jika Anda perlu menangani file upload bersama dengan form data, gunakan File dan UploadFile dari fastapi.
Contoh:
from fastapi import FastAPI, File, UploadFile, Form
app = FastAPI()
@app.post("/upload/")
async def upload_file(
file: UploadFile = File(...),
description: str = Form(...)
):
return {
"filename": file.filename,
"description": description,
"content_type": file.content_type
}
Penjelasan:
file: UploadFile = File(...): Menerima file upload.description: str = Form(...): Menerima inputdescriptiondari form data.
Cara Menguji:
- Gunakan Swagger UI atau Postman.
- Kirim permintaan POST dengan:
- file: Pilih file untuk diunggah.
- description: Masukkan deskripsi.
4. Menangani Multiple Form Fields
Anda dapat menerima banyak field form data sekaligus.
Contoh:
from fastapi import FastAPI, Form
app = FastAPI()
@app.post("/register/")
async def register(
username: str = Form(...),
password: str = Form(...),
email: str = Form(...),
age: int = Form(...)
):
return {
"username": username,
"email": email,
"age": age
}
Cara Menguji:
- Kirim form data dengan field
username,password,email, danage.
5. Menangani Nested Form Data
Jika Anda perlu menangani nested form data (form data dengan struktur kompleks), Anda dapat menggunakan Pydantic models bersama dengan Form.
Contoh:
from fastapi import FastAPI, Form
from pydantic import BaseModel
app = FastAPI()
class Address(BaseModel):
city: str
state: str
@app.post("/user/")
async def create_user(
name: str = Form(...),
address: str = Form(...)
):
# Parsing address dari string ke objek Address
address_obj = Address.parse_raw(address)
return {
"name": name,
"address": address_obj
}
Penjelasan:
address: str = Form(...): Menerima nested form data sebagai string JSON.Address.parse_raw(address): Mengubah string JSON menjadi