Xử lý yêu cầu (Request parsing)
Chương này trình bày cách sử dụng module reqparse
để xử lý (parse) đối số/danh sách đối số đầu vào (arguments) của một yêu cầu (request). Để thuận tiện trong việc trình bày, chúng tôi sẽ sử dụng một số thuật ngữ tiếng Anh sau: parse (xử lý), argument (đối số), request (yêu cầu).
Làm quen với module reqparse
reqparse
Đoạn mã nguồn bên dưới trình bày một ví dụ cách khai báo và sử dụng module reqparse
để trích xuất hai đối số là rate
kiểu int
, và name
kiểu str
. Trong module reqparse
, trường hợp không chỉ định kiểu dữ liệu, thì mặc định là kiểu dữ liệu chuỗi - str
. Khai báo help
trong đoạn mã nguồn được dùng để thông báo lỗi khi phát sinh lỗi sai kiểu dữ liệu.
Đối số bắt buộc
Đối số bắt buộc (Require arguments) là kỹ thuật buộc một request phải bao gồm giá trị (value) cho một thuộc tính được chỉ định. Điều này được thực hiện qua khai báo required=True
.
Đối số đa trị
Đối số đa trị (Multiple values) là kỹ thuật cho phép một tham số được truyền vào nhiều giá trị. Điều này được thực hiện qua khai báo action='append'
. Kết quả sau khi xử lý (parse) là một mảng chứa các giá trị được truyền vào.
Khai báo này cho phép một yêu cầu (request) có cấu trúc như sau:
Kết quả sau khi xử lý (parse) có dạng như sau:
Đổi tên đối số sau khi xử lý
Đổi tên đối số sau khi xử lý, được dịch từ thuật ngữ "Other Destinations", là kỹ thuật cho phép thay đổi tên của đối số sau khi xử lý (parse), được chỉ thị qua khai báo dest='new_name'
.
Xử lý đối số theo trường dữ liệu
Argument Locations - Xử lý đối số theo trường dữ liệu là kỹ thuật cho phép xử lý đối số đầu vào từ nhiều trường dữ liệu khác nhau, thông qua khai báo location='...'
, chẳng hạn, User-Agent
, session_id
. Một cách tổng quát, tất cả các trường dữ liệu được hỗ trợ bởi flask.Request
đều có thể được sử dụng trong phương thức add_argument()
.
Đoạn mã nguồn trên trình bày một số trường dữ liệu mà một đối tượng parser
có thể truy cập. Lưu ý rằng, nếu location='json'
thì phải sử dụng kèm với kiểu dữ liệu type=list
.
Khai báo location
trong phương thức add_argument()
còn có thể nhận dữ liệu dạng mảng để xử lý từ nhiều trường dữ liệu khác nhau, được gọi là xử lý đa trường dữ liệu (Multiple Locations), như ví dụ bên dưới.
Kế thừa Parser (Parser Inheritance)
Kiểm soát lỗi (Error Handling)
Tham số BUNDLE_ERRORS
có thể được cấu hình ở cấp độ ứng dụng Flask, bằng cách khai báo như sau:
Bên cạnh tính năng gom lỗi (bundle errors), các parser của module reqparse
còn hỗ trợ gửi thông báo lỗi thông qua tham số help
, bằng cách kết hợp thêm với chỉ thị {error_msg}
.
Tổng kết
Chương này đã trình bày các kỹ thuật xử lý đối số đầu vào của một yêu cầu - request parsing - thông qua module reqparse
. Chương tiếp theo sẽ trình bày các kỹ thuật xử lý phản hồi (response) cho mỗi yêu cầu (request) từ client.
Last updated