Django Admin登录Allauth解决方案代码放置位置及生效方法咨询
Django-Allauth 给Django Admin登录页添加登录限制的代码部署方案
代码放置位置
把官方提供的代码放在任意一个已添加到INSTALLED_APPS的应用的admin.py文件中即可,比如项目根目录下的admin.py(没有就新建),或者你主应用(如myapp)里的admin.py。
生效原理
Django启动时会自动加载所有INSTALLED_APPS下的admin.py文件,这段代码会覆盖默认AdminSite实例(admin.site)的login方法,通过staff_member_required装饰器强制用户先通过Allauth的登录页(由settings.LOGIN_URL指定)完成登录,且必须是staff权限用户才能访问Admin登录页面,以此间接解决Admin登录页无尝试次数限制的问题。
自定义AdminSite的情况
如果你自己创建了多个AdminSite实例(比如多后台站点),需要在每个自定义AdminSite的定义代码之后,对其login方法执行同样的装饰器处理,示例如下:
# 自定义AdminSite示例 from django.contrib.admin import AdminSite class MyCustomAdminSite(AdminSite): site_header = "自定义后台" custom_admin_site = MyCustomAdminSite(name='custom_admin') # 给自定义实例添加登录限制 from django.conf import settings from django.contrib.admin.views.decorators import staff_member_required custom_admin_site.login = staff_member_required( custom_admin_site.login, login_url=settings.LOGIN_URL )
官方代码示例(用于默认AdminSite)
from django.conf import settings from django.contrib import admin from django.contrib.admin.views.decorators import staff_member_required admin.site.login = staff_member_required( admin.site.login, login_url=settings.LOGIN_URL )
内容的提问来源于stack exchange,提问作者Bas W
相关产品推荐
相关产品推荐

