Khi phát triển ứng dụng web bằng FastAPI, việc đảm bảo dữ liệu nhập vào từ người dùng là hợp lệ là điều vô cùng quan trọng. Một công cụ giúp thực hiện việc này một cách hiệu quả và dễ dàng là Pydantic. Bài viết này sẽ mang đến cho bạn cái nhìn tổng quan về cách sử dụng Pydantic để xác thực dữ liệu trong ứng dụng FastAPI.
Giới thiệu về Pydantic
Pydantic là một thư viện Python mạnh mẽ cho phép bạn xác nhận dữ liệu và tạo các mô hình dữ liệu với độ an toàn cao. Nó làm việc dựa trên cấu trúc dữ liệu của Python như dataclass
, nhưng đi xa hơn bằng cách tự động kiểm tra và xác thực kiểu dữ liệu mỗi khi chúng được khởi tạo.
Khởi tạo dự án FastAPI
Trước khi đi sâu vào Pydantic, hãy bắt đầu bằng việc tạo một dự án FastAPI cơ bản.
Cài đặt FastAPI và Uvicorn (máy chủ ASGI) qua pip:
pip install fastapi uvicorn
Tạo tệp main.py
để viết ứng dụng cơ bản:
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
async def root():
return {"message": "Hello World"}
Chạy ứng dụng bằng lệnh sau:
uvicorn main:app --reload
Sử dụng Pydantic để tạo mô hình dữ liệu
Pydantic giúp chúng ta tạo các mô hình dữ liệu và tự động xác thực chúng. Dưới đây là cách sử dụng Pydantic để tạo và xác thực một mô hình dữ liệu cho người dùng:
from pydantic import BaseModel, Field
from fastapi import FastAPI, HTTPException
app = FastAPI()
class User(BaseModel):
id: int
name: str
email: str
age: int = Field(..., ge=18, le=100)
users = []
@app.post("/users/")
async def create_user(user: User):
for existing_user in users:
if existing_user.id == user.id:
raise HTTPException(status_code=400, detail="User ID already exists")
users.append(user)
return user
-
Tạo lớp User: Chúng ta sử dụng Pydantic để định nghĩa lớp
User
chứa các thuộc tínhid
,name
,email
, vàage
. Thuộc tínhage
được giới hạn để chỉchấp nhận giá trị từ 18 đến 100. -
Xử lý yêu cầu POST: Trong hàm
create_user
, chúng ta tạo một endpoint giúp thêm người dùng mới. FastAPI sẽ sử dụng mô hìnhUser
để tự động xác thực dữ liệu đầu vào. Nếu dữ liệu không hợp lệ, một phản hồi lỗi sẽ được trả về mà không cần thêm mã kiểm tra thủ công.
Các kiểu dữ liệu nâng cao
Pydantic hỗ trợ một loạt các kiểu dữ liệu Python và đi xa hơn với các kiểu phức tạp hơn như ngày giờ, URL, và nhiều loại khác.
Ví dụ, để xử lý dữ liệu ngày giờ và URL:
from pydantic import BaseModel, HttpUrl
from datetime import datetime
class Article(BaseModel):
title: str
content: str
created_at: datetime
url: HttpUrl
Trong ví dụ trên, thuộc tính created_at
sẽ chỉ chấp nhận chuỗi có định dạng hợp lệ cho datetime, và url
sẽ chỉ chấp nhận giá trị là URL hợp lệ.
Xác thực dữ liệu lồng nhau
Pydantic cũng hỗ trợ xác thực dữ liệu lồng nhau bằng cách sử dụng mô hình trong mô hình. Đây là một ví dụ:
class Address(BaseModel):
street: str
city: str
postal_code: str
class UserWithAddress(BaseModel):
id: int
name: str
email: str
address: Address
Với cấu trúc trên, chúng ta có thể tạo một endpoint để xử lý người dùng cùng với địa chỉ của họ:
@app.post("/users-with-address/")
async def create_user_with_address(user: UserWithAddress):
return user
Lời kết
Bằng việc kết hợp FastAPI và Pydantic, bạn có thể dễ dàng xác thực và xử lý dữ liệu đầu vào một cách hiệu quả và an toàn. Pydantic giúp giảm bớt công việc xác thực thủ công, do đó bạn có thể tập trung vào phát triển logic ứng dụng. Hãy thử áp dụng Pydantic trong dự án tiếp theo của bạn để thấy được sự tiện lợi và mạnh mẽ mà nó mang lại.
Comments