Làm cách nào để thêm móc vào Quản trị viên Django, sao cho tôi có thể thực thi chức năng khi người dùng đăng nhập hoặc đăng xuất?Hacking Django Admin, móc để đăng nhập/đăng xuất
Trả lời
Cập nhật: Phương pháp này đã lỗi thời kể từ Django 1.3, xem Tommy's answer bên dưới để sử dụng tín hiệu.
Tôi cũng đang tìm kiếm câu trả lời cho điều này và kết thúc bằng một cách khác. Bạn có thể sử dụng chế độ xem của riêng bạn để đăng nhập và đăng xuất, thực hiện một số thao tác và sau đó gọi chế độ xem xác thực. Để đăng nhập:
def login(request, *args, **kwargs):
from django.contrib.auth.forms import AuthenticationForm
if request.method == 'POST':
form = AuthenticationForm(data=request.POST)
if form.is_valid():
# login successful
do_something()
from django.contrib.auth.views import login as authlogin
return authlogin(request, *args, **kwargs)
Và đối với logout:
def logout(request, *args, **kwargs):
do_something()
from django.contrib.auth.views import logout as authlogout
return authlogout(request, *args, **kwargs)
Bạn có thể làm bất cứ điều gì bạn muốn xử lý trong quan điểm tùy chỉnh của bạn ở vị trí của placeholders do_something, chẳng hạn như phát ra tín hiệu, đăng nhập đăng nhập và đăng nhập -out lần, v.v.
Cuối cùng, đừng quên cập nhật urls.py
để trỏ đến chế độ xem tùy chỉnh của bạn.
Tôi không chắc làm thế nào một phụ trợ auth tùy chỉnh có thể xử lý các sự kiện đăng xuất, như tôi cuối cùng đã từ bỏ và thử thay vào đó. Ngoài ra, phương pháp này có lợi thế là cung cấp đối tượng request
thay vì chỉ người dùng.
Django không buồn bã không gửi bất kỳ tín hiệu vào các sự kiện mà .... Nhưng bạn có thể làm AuthorizationBackend tùy chỉnh của riêng bạn mà cho phép bạn làm như vậy:
from django.dispatch import Signal
post_login = Signal(providing_args=['user'])
from django.contrib.auth.backends import ModelBackend
from django.contrib.auth.models import User
class AuthSignalBackend(ModelBackend):
def authenticate(self, username=None, password=None):
try:
user = User.objects.get(username=username)
if user.check_password(password):
post_login.send(sender=None, user=user)
return user
except User.DoesNotExist:
return None
def login_handler(sender, **kwargs):
print "logging in..."
post_login.connect(login_handler)
Để kích hoạt nó, bạn phải đặt AUTHENTICATION_BACKENDS = (myapp.mymodule.AuthSignalBackend',)
tại của bạn settings.py!
Tôi chỉ tìm thấy chủ đề này khi tìm kiếm một giải pháp để những người khác có thể quá ...
Lazerscience câu trả lời có vẻ tốt cho đến nay nhưng tôi cũng nhận thấy rằng các nhà phát triển cốt lõi Django đã chấp nhận a patch rằng sẽ gây ra một tín hiệu trên log -in/đăng xuất.
Đây có thể là giải pháp thanh lịch hơn khi nó trở thành bản phát hành chính thức của Django.
Và để tham khảo, các tài liệu trên Signals.
Tín hiệu đăng nhập và đăng xuất là một phần của bản phát hành chính thức là 1.3: [Tham khảo] (https://docs.djangoproject.com/en/1.3/topics/auth/#login-and-logout-signals) – Federico
Kể từ Django 1.3, khung công tác xác thực tạo ra tín hiệu để đăng nhập và đăng xuất có thể được sử dụng để cung cấp móc của riêng bạn.
Bạn phải kết nối chức năng của bạn để các tín hiệu django.contrib.auth.signals.user_logged_in như:
def fun(sender, **kwargs):
print "do your custom stuff here"
from django.contrib.auth.signals import user_logged_in
user_logged_in.connect(fun)
- 1. django admin - xuất khẩu dưới dạng csv
- 2. Hành động tùy chỉnh trong Django Admin
- 3. WMD trong Django Admin?
- 4. Django Admin Fieldsets
- 5. Django admin list_display newline
- 6. tìm django/contrib/admin/templates
- 7. django 1.5 admin inline extra
- 8. django: sử dụng admin datepicker
- 9. Django 1.4 và NoReverseMatch tại/admin/lỗi
- 10. Django-Admin: CharField như TextArea
- 11. Django fix Admin số nhiều
- 12. Các trường động trong Django Admin
- 13. Django Admin Tối ưu hóa tìm kiếm
- 14. Django Admin Thả xuống các lựa chọn
- 15. Mô hình nhóm trong django admin
- 16. Thứ tự sắp xếp của Django admin
- 17. Django-Admin: thuộc tính list_filter từ UserProfile
- 18. Nhập ngày châu Âu tại Django Admin
- 19. Ẩn phần Auth trong Django Admin
- 20. Khó khăn ghi đè mẫu Django Admin
- 21. Cấu hình trang web trong django-admin
- 22. Hacking/cracking deontology
- 23. Django: UserProfile với Unique Foreign Key trong Django Admin
- 24. Quản trị viên Django DoesNotExist tại/admin/
- 25. Django của admin (& filter_vertical) không làm việc
- 26. Làm thế nào để buộc Django Admin sử dụng select_related?
- 27. Tìm hiểu Embedded Firmware Hacking
- 28. Đăng xuất Django (chuyển hướng đến trang chủ) .. Xóa cookie?
- 29. Xóa ứng dụng mặc định từ Django-admin
- 30. Đăng xuất người dùng Django bằng xác thực từ xa
Ngoài ra: để truy cập sử dụng trong giao diện đăng nhập bọc, sử dụng 'form.get_user()' , vì đối tượng 'request' sẽ trả về' AnonymousUser'. – rlafuente
Là một người theo dõi muộn, và như nhận xét của Tommy, Django 1.3 đã thêm [tín hiệu đăng nhập và đăng xuất] (https://docs.djangoproject.com/en/dev/topics/auth/#login-and-logout-signals) vào ứng dụng auth, cung cấp một giải pháp đơn giản cho câu hỏi và làm cho phương thức này lỗi thời. – rlafuente
Doh, chỉ cần chú ý đến Federico. Chúc mừng tất cả! – rlafuente