如何添加挂钩到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. 编辑Django管理员注销模板?
- 7. Liferay - 自动登录挂钩/ portlet不会注销当前用户
- 8. 登录/注销的管理员和普通用户
- 9. Wordpress管理员成功登录后立即注销
- 10. 在注销之前和管理员登录后设置cookie
- 11. 从Quickbooks注销管理员
- 12. 客户登录后Woocommerce挂钩
- 13. 挂钩登录(MVC4)
- 14. Django管理注销网站
- 15. 无法登录到Django管理员
- 16. 登录到Django的管理员
- 17. 无法登录到Django管理员
- 18. Django管理员登录背景
- 19. 管理员登录表单django
- 20. django的注销(请求)也注销django管理员和反之亦然?
- 21. Git挂钩管理
- 22. Android FacebookSDK V4.20使用登录管理器登录和注销
- 23. 如何找到哪个管理员登录django管理网站?
- 24. 管理员登录不会登录?
- 25. 管理员登录和观众登录
- 26. 管理员页面登录
- 27. 管理员登录开发
- 28. 管理员验证登录
- 29. Magento管理员登录
- 30. 管理员登录表格
另外:访问用户在登录包裹查看,使用'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