Hướng dẫn check input python
Validate dữ liệu là một khâu rất cần thiết trong lập trình, đặc biệt là lập trình web. Trong Python, cũng có rất nhiều thư viện hỗ trợ validation. Trong số đó, Marshmallow là thư viện có tên tuổi. Nào chúng ta cùng khám phá nhé IntroductionTrang chủ của Marshmallow các bạn có thể tham khảo tại đây: https://marshmallow.readthedocs.io/en/3.0/ Ngoài ra, Marshmallow cũng được sử dụng kết hợp với các framework web khác tạo ra các plugin hay extension như:
Tóm tắt một ngắn gọn một vài features của Marshmallow:
InstallationMarshmallow được
public tại đây: https://pypi.org/project/marshmallow/ Bạn có thể cài dễ dàng qua
Lastest version tại thời điểm bài viết này là Python version support marshmallow:
GuideTrong guide này, mình sẽ chỉ giới thiệu tóm tắt 3 features chính:
Ngoài ra, các bạn có thể đọc thêm các features khác ở trong docs nhé: ValidationĐầu tiên, mình sẽ khởi tạo một object model:
Tiếp theo, mình tạo một schema validate các field tương ứng trong objects models trên.
Để validate input data, ta sẽ sử dụng syntax:
Kết quả có được:
Tức là dữ liệu này đúng format mình mong muốn. Thử một example khác
Kết quả:
Kết quả này là do value của email đang lỗi định dạng
email: Ok, ta quay về chỗ định nghĩa Schema, thêm option
Thử lại example trên, ta sẽ thấy lỗi in ra:
Để handle exception này, ta sẽ làm như sau:
Tiếp theo, trong Object Customer, ta mong muốn username là required. Trong Schema ta cần chỉnh lại như sau:
Kiểm tra lại nào:
Look good :v. Kế tiếp, username ta mong muốn độ dài lớn hơn 8 ký tự và nhỏ hơn 16 ký tự.
Kế quả sẽ là:
Vậy, nếu bài toán của mình input data thừa ra các field thì sao. Mặc định, marshmallow sẽ remove những field đó ra. Tuy nhiên, ta có thể handle nó. Tuy nhiên bạn phải upgrade version của marshmallow lên bản 3.0: https://marshmallow.readthedocs.io/en/3.0/upgrading.html
Trong đó:
DeserializeĐể deserialize to object, ta sẽ cần sử dụng decorator: Example:
Sau khi define lại Schema, method
SerializeTa sẽ serialize objects bằng các sử dụng Example:
Ta sẽ được:
Thanks for reading! |