python-272Đọc toàn bộ đề miễn phí

Chuẩn hoá dữ liệu mặt hàng bằng mô hình Pydantic

Mọi API đều có một điểm vào duy nhất cho dữ liệu thô: mô hình của Pydantic. Nó kiểm tra

PythonCơ bản14 phút

Tiến độ của tôi ở bài này

Điểm và code bạn nộp được lưu vào tài khoản sau khi chấm bài.

Đang tải điểm của bạn…

Kiến thức và chủ đề

fastapipydanticvalidationentry-ramp

Kiến thức tiên quyết: python-basics, python-dictionaries.

Nội dung đề bài

Mô tả bài toán

Mọi API đều có một điểm vào duy nhất cho dữ liệu thô: mô hình của Pydantic. Nó kiểm tra kiểu, bắt buộc trường cần thiết, loại bỏ trường lạ và trả về đối tượng đã sạch. Nhờ vậy phần xử lý phía sau không phải tự kiểm tra lại từng khoá.

Yêu cầu

  • Khai báo mô hình ItemPayload kế thừa BaseModel với ba trường:
  • name: chuỗi, bắt buộc.
  • quantity: số nguyên, bắt buộc.
  • tag: chuỗi, mặc định "general".
  • Thêm luật kiểm tra cho name: cắt khoảng trắng hai đầu, đưa về chữ thường; nếu sau

khi cắt mà chuỗi rỗng thì báo lỗi.

  • Thêm luật kiểm tra cho quantity: nhỏ hơn 1 là không hợp lệ.
  • Viết hàm validate_item(payload) nhận dict dữ liệu thô, dựng ItemPayload từ dict

đó và trả về dict đã chuẩn hoá {"name": ..., "quantity": ..., "tag": ...}.

  • Nếu dữ liệu không hợp lệ, hàm phải ném ValueError (không để lộ

pydantic.ValidationError ra ngoài).

Quy ước nộp bài

Nộp mô hình ItemPayload và hàm validate_item trong solution.py. Hệ thống gọi hàm trực tiếp theo tên đối số, so dict trả về với kết quả soạn tay và kiểm tra ngoại lệ ValueError; không đọc dữ liệu từ stdin và không in ra stdout.

Input

  • payload: dict dữ liệu thô, có thể thiếu khoá, thừa khoá, sai kiểu chữ/số hoặc vi

phạm các luật kiểm tra ở trên.

Output

Dict có đúng ba khoá name, quantity, tag: name đã cắt khoảng trắng và về chữ thường, quantity là số nguyên, tag lấy từ dữ liệu hoặc bằng "general" nếu thiếu.

Ràng buộc

  • name và quantity là hai trường bắt buộc; thiếu một trong hai phải báo lỗi.
  • Trường lạ trong payload bị bỏ qua, không xuất hiện trong kết quả.
  • Chuỗi số như "4" vẫn được Pydantic chuyển thành số nguyên 4.
  • Chỉ trả về dict; không trả về đối tượng ItemPayload.
  • Hàm không được ném pydantic.ValidationError ra ngoài.

Ví dụ 1

Input

validate_item(payload={"name": "  Banana ", "quantity": 3})

Output

{"name": "banana", "quantity": 3, "tag": "general"}

Ví dụ 2

Input

validate_item(payload={"name": "Tea", "quantity": 0})

Output

raises ValueError

Giải thích

Với payload = {"name": " Banana ", "quantity": 3}: tên được cắt và đưa về chữ thường thành "banana", không có khoá tag nên lấy mặc định, kết quả là {"name": "banana", "quantity": 3, "tag": "general"}. Với payload có "quantity": 0 thì hàm ném ValueError.

3 cấp độ gợi ýMở dần khi bạn thật sự cần hỗ trợ.
Phân tích lời giảiGiải thích hướng tư duy và thuật toán.
Code tham khảoDùng để đối chiếu sau khi tự làm.

Gợi ý và lời giải chỉ mở sau khi bạn bấm Nộp bài. Giáo viên và quản trị viên mở được ngay.

Nhóm Zalo