0
0
Lập trình
TT

30 Ngày Chinh Phục FastAPI - Ngày 3: Tìm Hiểu Pydantic và Kiểm Tra Dữ Liệu Trong Ứng Dụng Web

Đăng vào 2 tuần trước

• 4 phút đọc

Chủ đề:

FastAPIFastAPI30D

Ngày 3: Tìm Hiểu Pydantic và Kiểm Tra Dữ Liệu Trong Ứng Dụng Web

1. Giới thiệu về Pydantic

1.1. Pydantic Là Gì?

Pydantic là một thư viện mạnh mẽ trong Python, giúp phát triển viên quản lý và kiểm tra dữ liệu một cách dễ dàng và hiệu quả. Hãy tưởng tượng bạn có một người bạn thông minh, luôn bên cạnh giúp bạn kiểm tra các dữ liệu để đảm bảo mọi thứ đều chính xác và hợp lệ.

  • Nguyên lý hoạt động: Bạn có thể nói với Pydantic rằng "mình muốn dữ liệu phải đúng như thế này!"
  • Ví dụ cụ thể: Nếu bạn muốn tên của một sản phẩm phải là chữ và giá của nó phải là số, Pydantic sẽ giúp bạn làm điều đó. Nếu ai đó đưa cho bạn một dữ liệu không phù hợp, Pydantic sẽ thông báo lỗi ngay lập tức.
  • Lợi ích: Việc sử dụng Pydantic giúp cho mã nguồn của bạn trở nên dễ đọc và rõ ràng hơn, giống như một cuốn truyện tranh có hình ảnh minh họa.

Tóm gọn lại:

  • Kiểu dữ liệu: Sử dụng "type hints" (gợi ý kiểu) của Python để xác định loại dữ liệu mong muốn.
  • Kiểm tra dữ liệu: Ngay khi dữ liệu không phù hợp được gửi tới, Pydantic sẽ thông báo lỗi ngay lập tức.
  • Rõ ràng và dễ đọc: Code của bạn sẽ trở nên mạch lạc và dễ hiểu hơn.

1.2. Tại Sao Nên Sử Dụng Pydantic?

Pydantic mang lại nhiều lợi ích rõ ràng:

  • Tính chính xác: Đảm bảo dữ liệu luôn ở định dạng cần thiết.
  • Ngăn ngừa lỗi: Giảm thiểu khả năng xảy ra lỗi do dữ liệu không hợp lệ.
  • Tài liệu API chính xác: Tạo ra tài liệu API rõ ràng và dễ hiểu hơn cho người dùng.
  • Cải thiện trải nghiệm người dùng: Người dùng sẽ có trải nghiệm tốt hơn khi hệ thống hoạt động chính xác và mượt mà.

2. Thực Chiến Với Pydantic

2.1. Cách Định Nghĩa Pydantic Model

Để bắt đầu, bạn cần cài đặt thư viện Pydantic:

Copy
pip install pydantic

Sau khi cài xong, bạn có thể tạo ra một Pydantic Model như sau:

  • Tạo một class bằng cách kế thừa từ pydantic.BaseModel.
  • Thêm các thuộc tính cho class, chẳng hạn như name, description, price, tax.
  • Định nghĩa kiểu cho từng thuộc tính, ví dụ name là chuỗi (string), price là số (float).
  • Nếu một thuộc tính nào đó là không bắt buộc, bạn có thể sử dụng typing.Optional để chỉ định điều đó.
  • Bạn cũng có thể đặt giá trị mặc định cho các thuộc tính.

Dưới đây là một ví dụ về cách định nghĩa một Pydantic Model:

Copy
from typing import Optional
from pydantic import BaseModel

class Item(BaseModel):
    name: str
    description: Optional[str] = None  # Có thể không có
    price: float
    tax: Optional[float] = None  # Có thể không có

Lưu ý: Bạn có thể xây dựng các Pydantic Model phức tạp hơn bằng cách lồng các model vào nhau, giống như cách bạn xây dựng một lâu đài từ các viên gạch LEGO.

2.2. Bài Tập Thực Hành

Bài Tập 1: Tạo Model Cho Người Dùng

Hãy tạo một Pydantic Model cho người dùng (User) với các thuộc tính:

  • username: chuỗi (string)
  • email: chuỗi (string)
  • full_name: chuỗi (string) có thể là None
  • age: số nguyên (integer) có thể là None
Copy
from pydantic import BaseModel
from typing import Optional

class User(BaseModel):
    username: str
    email: str
    full_name: Optional[str] = None
    age: Optional[int] = None

Bài Tập 2: Kiểm Tra Dữ Liệu

Viết một hàm để kiểm tra tính hợp lệ của một đối tượng User sử dụng model đã tạo:

Copy
def create_user(user_data):
    try:
        user = User(**user_data)
        print("User created successfully:", user)
    except Exception as e:
        print("Error:", e)

# Thử nghiệm với dữ liệu hợp lệ
create_user({
    "username": "john_doe",
    "email": "john@example.com",
    "full_name": "John Doe",
    "age": 30
})

# Thử nghiệm với dữ liệu không hợp lệ
create_user({
    "username": "jane_doe",
    "email": "jane@example.com",
    "full_name": "Jane Doe",
    "age": "thirty"  # Lỗi: age phải là số nguyên
})

2.3. Bài Tập Nâng Cao

Bài Tập 3: Lồng Nhiều Models Vào Nhau

Tạo một model cho địa chỉ (Address) và lồng vào model User với các thuộc tính:

  • street: chuỗi (string)
  • city: chuỗi (string)
  • state: chuỗi (string)
  • zip_code: chuỗi (string)
Copy
class Address(BaseModel):
    street: str
    city: str
    state: str
    zip_code: str

class UserWithAddress(BaseModel):
    username: str
    email: str
    full_name: Optional[str] = None
    age: Optional[int] = None
    address: Address

# Thử nghiệm với UserWithAddress Model
create_user_with_address({
    "username": "john_doe",
    "email": "john@example.com",
    "full_name": "John Doe",
    "age": 30,
    "address": {
        "street": "123 Main St",
        "city": "Anytown",
        "state": "CA",
        "zip_code": "12345"
    }
})

2.4. Kết Luận

Pydantic là một công cụ hữu ích giúp các lập trình viên định nghĩa cấu trúc dữ liệu một cách rõ ràng và kiểm tra tính hợp lệ của dữ liệu trước khi sử dụng. Hãy tiếp tục khám phá về Swagger UI, Query Parameters, và Path Parameters trong ngày tiếp theo. Trong bài tiếp theo, chúng ta sẽ tìm hiểu thêm về cách thức làm việc với FastAPI một cách hiệu quả hơn.
source: viblo

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào