You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django-axes报无AXES_HANDLER属性错误的修复方法

问题根因

连环出现AXES_*属性缺失报错,和自定义用户模型、认证业务逻辑无关,核心是两个配置错误:

  • 你在settings.py末尾错误手动调用了django.setup():Django的settings模块由框架在启动流程中自动加载初始化,django-axes依赖启动阶段的配置注入逻辑自动补全所有缺省配置项(包括你现在报错的AXES_HANDLER,以及之前你手动补的一众属性),提前调用django.setup()会打断这个注入流程,导致所有未手动声明的AXES配置都报属性不存在,手动补一个就会漏下一个,永远补不完。
  • 大概率存在django-axes版本与Django 3.1不兼容的问题,部分过新或过旧的axes版本对Django 3.1的配置加载逻辑适配有缺陷。
修复步骤
  • 直接删除settings.py最后一行的django.setup(),同时删掉你之前手动补的所有和默认值一致的AXES_*配置(比如AXES_USERNAME_CALLABLE = None、AXES_PROXY_COUNT = None这类你没有修改默认规则的项),这类配置不需要手动声明,框架会自动加载。
  • 卸载当前安装的django-axes,安装适配Django 3.1的兼容版本,执行命令:
pip uninstall django-axes -y
pip install django-axes==5.39.0
  • 执行数据库迁移,生成axes需要的登录失败记录数据表:
python manage.py migrate
  • 修正settings.py里的笔误:把拼写错误的SION_COOKIE_SECURE = True改成SESSION_COOKIE_SECURE = True,否则会话Cookie的安全配置不会生效。
  • 最终保留的AXES自定义配置只需要留你确实修改了默认规则的项即可,示例如下:
AXES_ENABLED = True 
AXES_FAILURE_LIMIT = 3  
AXES_COOLOFF_TIME = 0.1  # 锁定时长0.1小时即6分钟
AXES_LOCKOUT_CALLABLE = "Chat.views.lockout"
AXES_META_PRECEDENCE_ORDER = [
    'HTTP_X_FORWARDED_FOR',
    'REMOTE_ADDR',
]
验证说明

你在views.py中写的lockout回调函数、认证逻辑中传入request=request的写法完全符合官方要求,不需要调整。重启服务后所有属性缺失报错会直接消失,AXES_HANDLER会自动加载默认值axes.handlers.database.AxesDatabaseHandler,登录锁定逻辑可以正常运行。


内容的提问来源于stack exchange,提问作者IceSpeaker

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 06:12:22