如何添加掛鉤到Django管理員,以便我可以在用戶登錄或註銷時執行功能?黑客Django管理員,登錄/註銷掛鉤
5
A
回答
4
更新:從Django 1.3開始,此方法已過時,請參閱下面的Tommy's answer以瞭解使用信號。
我也在尋找答案,並以另一種方式結束。您可以使用自己的視圖進行登錄和註銷,執行一些操作,然後調用身份驗證視圖。對於登錄:
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)
而對於註銷:
def logout(request, *args, **kwargs):
do_something()
from django.contrib.auth.views import logout as authlogout
return authlogout(request, *args, **kwargs)
你可以做任何處理,你在你的自定義視圖喜歡的地方do_something佔位符,例如發出信號,記錄登錄和日誌等等。
最後,不要忘記更新您的urls.py
指向您的自定義視圖。
我不確定自定義auth後端如何處理註銷事件,因爲我最終放棄了這一點,並嘗試使用它。另外,這種方法的優點是可以提供request
對象而不僅僅是用戶。
6
Django的不可惜不是發送對事件的任何信號....但是你可以讓自己的自定義AuthorizationBackend,使你可以這樣做:
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)
要啓用它,你必須把AUTHENTICATION_BACKENDS = (myapp.mymodule.AuthSignalBackend',)
你settings.py中!
2
4
從Django 1.3開始,auth框架確實會生成用於登錄和註銷的信號,可用於提供您自己的鉤子。
你有你的功能連接到像django.contrib.auth.signals.user_logged_in信號:
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管理員登錄
- 2. Django登錄/註銷
- 3. 管理員註銷錯誤的Django nonrel
- 4. Django管理員註銷模型保存
- 5. 早期Django管理員註銷
- 6. Wordpress管理員成功登錄後立即註銷
- 7. 客戶登錄後Woocommerce掛鉤
- 8. 從Quickbooks註銷管理員
- 9. Django管理註銷網站
- 10. 管理員登錄表單django
- 11. 登錄到Django的管理員
- 12. Django管理員登錄背景
- 13. 無法登錄到Django管理員
- 14. django的註銷(請求)也註銷django管理員和反之亦然?
- 15. Git掛鉤管理
- 16. 管理員登錄不會登錄?
- 17. 管理員登錄和觀衆登錄
- 18. Magento1.9管理員登錄
- 19. 管理員頁面登錄
- 20. 管理員登錄開發
- 21. Magento管理員登錄把我踢回管理登錄
- 22. Silverstripe登錄/註銷
- 23. facebook登錄/註銷
- 24. 通過Objective-c處理登錄/註銷
- 25. 會話處理和登錄/註銷
- 26. 管理登錄/註銷轉換的建議
- 27. 如何在Xcode上管理登錄和註銷過程
- 28. 如何在Android登錄/註銷中管理會話?
- 29. 如何在Android登錄/註銷中管理會話?
- 30. 當django-cms應用程序未安裝在根上時,無效的管理員登錄和註銷網址
另外:訪問用戶在登錄包裹查看,使用'form.get_user()' ,因爲'request'對象將返回'AnonymousUser'。 – rlafuente 2010-06-23 10:53:24
作爲一個遲來的後續,正如湯米所說,Django 1.3添加了[登錄和註銷信號](https://docs.djangoproject.com/en/dev/topics/auth/#login-and-logout-signals)到auth應用程序,爲問題提供了一個直接的解決方案,並使此方法過時。 – rlafuente 2012-05-07 22:39:38
Doh,剛剛注意到Federico也提到了這一點。乾杯! – rlafuente 2012-05-07 22:40:17