Tôi đang nghiên cứu Flask-Admin kết hợp với PeeWee Backend ModelView (nhưng câu hỏi của tôi cũng có thể được áp dụng cho SQLAlchemy backend), và có hai điều tôi không thể tìm thấy trong tài liệu hoặc ví dụ:Flask-Admin ModelView xác thực tùy chỉnh?
(1). Khi tôi mô hình của tôi có một trường duy nhất và tôi kiểm tra/cố gắng sao chép nó, tôi nhận được một màn hình lỗi Flask mặc định, với thông báo: "IntegrityError: tên người dùng cột không phải là duy nhất"
Tôi đang thử nghiệm ví dụ PeeWee trong https://github.com/mrjoes/flask-admin/blob/master/examples/peewee/simple.py và tôi đã thay đổi dòng 21 thành "username = peewee.CharField (max_length = 80, unique = True)"
Sau đó, tôi cố thêm hai người dùng bằng "username" = "user1".
Có cách nào lịch sự để quay lại màn hình chỉnh sửa (hoặc thậm chí màn hình danh sách, màn hình quản trị viên sẽ thực hiện) nhưng với thông báo lỗi được kiểm soát? Tôi không cần một thông báo lỗi tùy chỉnh, thông báo hiện tại là ok (IntegrityError: tên người dùng cột không phải là duy nhất). Nhưng tôi không phải màn hình sụp đổ.
Tôi có thể thiết lập/sử dụng trang mặc định của Flask 500, nhưng sau đó tôi sẽ thoát hoàn toàn dòng Flask-Admin và người dùng sẽ "bỏ lỡ" dữ liệu mà anh vừa nhập.
Tôi muốn quay lại màn hình chỉnh sửa nhưng có một số loại thông báo cảnh báo/lỗi. Tôi không ngại phải mở rộng các mẫu, đây không phải là vấn đề. Nhưng tôi không thể tìm thấy một nơi để ngăn chặn các lỗi và xử lý nó đúng cách. Bất kỳ đề xuất?
và (2):
Tôi cũng cần một cách để thêm một số xác thực lưu trước trong luồng. Ví dụ, tôi đang ở trong một hình thức chỉnh sửa của một thực thể có initial_date và final_date, và tôi muốn đảm bảo final_date lớn hơn initial_date hoặc là null, trước khi lưu.
Tôi có thể thực hiện phía máy khách này, thông qua javascript, mở rộng mẫu chỉnh sửa cho thực thể đó và thêm tập lệnh xác thực của tôi vào khối đuôi (và chặn sự kiện form.submit).
Nhưng điều gì sẽ xảy ra nếu xác thực của tôi yêu cầu xác thực phút cuối máy chủ? Có cách nào/nơi để chặn luồng và thêm xác nhận của tôi, và với may mắn, hãy trả lại thông báo lỗi của tôi, trong cùng một thời trang được thảo luận trong câu hỏi 1?
cảm ơn trước,
regards,
Lý do tại sao sự cố - Flask-Admin sẽ truy cập lại tất cả các ngoại lệ (ngay cả IntegrityError) khi Flask đang chạy trong chế độ gỡ lỗi. Tôi sẽ thêm xử lý IntegrityError như một ngoại lệ cho quy tắc này. lưu trước có thể được thực hiện dưới dạng hoặc trong 'on_model_change' - bạn có thể ném ngoại lệ từ đó. Trong khi ngoại lệ sẽ được hiển thị với trình gỡ lỗi Werkzeug, trong chế độ sản xuất bạn sẽ thấy thông báo lỗi đẹp. – Joes
@Joes 'on_model_change' là một móc hậu lưu như được ghi trong tài liệu": "Thực hiện một số hành động ** sau ** mô hình được tạo hoặc cập nhật." Không có móc lưu trước trong Flask admin AFAIK. lớp form cơ sở và tùy biến trong lớp con là cách duy nhất để trả lời câu hỏi của OP – Devy
@Devy 'on_model_change' được gọi khi mô hình được cập nhật với dữ liệu biểu mẫu, nhưng trước khi phiên được cam kết với cơ sở dữ liệu. – Joes