Trong ứng dụng Django của mình, tôi cần bắt đầu chạy một số công việc nền định kỳ khi người dùng đăng nhập và ngừng chạy chúng khi người dùng đăng xuất, vì vậy tôi đang tìm một cách đơn giản để
- nhận được thông báo về người dùng đăng nhập / đăng xuất
- truy vấn trạng thái đăng nhập của người dùng
Theo quan điểm của tôi, giải pháp lý tưởng sẽ là
- một tín hiệu được gửi bởi mỗi
django.contrib.auth.views.login
và... views.logout
- một phương pháp
django.contrib.auth.models.User.is_logged_in()
, tương tự với... User.is_active()
hoặc... User.is_authenticated()
Django 1.1.1 không có điều đó và tôi miễn cưỡng vá nguồn và thêm nó (dù sao cũng không chắc chắn về cách làm điều đó).
Như một giải pháp tạm thời, tôi đã thêm is_logged_in
trường boolean vào mô hình UserProfile được xóa theo mặc định, được đặt lần đầu tiên người dùng truy cập trang đích (được xác định bởi LOGIN_REDIRECT_URL = '/'
) và được truy vấn trong các yêu cầu tiếp theo. Tôi đã thêm nó vào UserProfile, vì vậy tôi không phải bắt nguồn và tùy chỉnh mô hình Người dùng nội trang chỉ cho mục đích đó.
Tôi không thích giải pháp này. Nếu người dùng nhấp vào nút đăng xuất một cách rõ ràng, tôi có thể xóa cờ, nhưng hầu hết thời gian, người dùng chỉ rời khỏi trang hoặc đóng trình duyệt; xóa cờ trong những trường hợp này dường như không thẳng với tôi. Bên cạnh đó (mặc dù vậy, is_logged_in
đó là sự rõ ràng của mô hình dữ liệu), không thuộc về UserProfile, mà là trong mô hình Người dùng.
Có ai có thể nghĩ ra các cách tiếp cận thay thế không?