Tôi đang làm việc trên một ứng dụng Django lớn, phần lớn trong số đó yêu cầu đăng nhập để truy cập. Điều này có nghĩa là tất cả các ứng dụng của chúng tôi, chúng tôi đã rắc:
@login_required
def view(...):
Điều đó tốt, và nó hoạt động tốt miễn là chúng ta nhớ thêm nó ở mọi nơi ! Đáng buồn thay, đôi khi chúng ta quên, và thất bại thường không quá rõ ràng. Nếu liên kết duy nhất đến một chế độ xem nằm trên trang @login_required thì bạn sẽ không nhận thấy rằng bạn thực sự có thể tiếp cận chế độ xem đó mà không cần đăng nhập. Nhưng kẻ xấu có thể nhận thấy, đó là một vấn đề.
Ý tưởng của tôi là đảo ngược hệ thống. Thay vì phải nhập @login_required ở khắp mọi nơi, thay vào đó tôi sẽ có một cái gì đó như:
@public
def public_view(...):
Chỉ dành cho những thứ công cộng. Tôi đã cố gắng thực hiện điều này với một số phần mềm trung gian và dường như tôi không thể làm cho nó hoạt động. Mọi thứ tôi đã thử đều tương tác không tốt với phần mềm trung gian khác mà chúng tôi đang sử dụng, tôi nghĩ vậy. Tiếp theo, tôi đã thử viết một cái gì đó để duyệt qua các mẫu URL để kiểm tra xem mọi thứ không phải là @public đã được đánh dấu @login_required hay chưa - ít nhất sau đó chúng tôi sẽ gặp lỗi nhanh nếu chúng tôi quên điều gì đó. Nhưng sau đó tôi không thể tìm ra cách để biết liệu @login_required đã được áp dụng cho một chế độ xem hay chưa ...
Vì vậy, cách thích hợp để làm điều này là gì? Cảm ơn đã giúp đỡ!