Djoser配置含PASSWORD_RESET_CONFIRM_URL仍报错,激活邮件未发送求助
问题解决:Djoser密码重置报错与激活邮件未发送
一、密码重置报错:'Settings' object has no attribute 'PASSWORD_RESET_CONFIRM_URL'
虽然你的DJOSER配置中已包含PASSWORD_RESET_CONFIRM_URL,但系统仍提示该属性不存在,可按以下步骤排查:
- 检查配置是否被覆盖:确认
DJOSER字典在settings.py中没有被后续代码重新赋值清空,比如是否存在DJOSER = {}这类覆盖配置的代码。 - 统一键名引号格式:你的配置中
PASSWORD_RESET_CONFIRM_URL用了双引号,其他键用单引号,虽Python语法允许,但建议统一为单引号避免潜在解析问题。 - 确认配置位置正确性:确保
DJOSER配置写在项目主settings.py中,而非未被加载的自定义settings模块里,Djoser会直接从django.conf.settings读取配置,路径错误会导致属性缺失。 - 移除冗余尾逗号:
SERIALIZERS配置行末尾的多余逗号'user_create': 'users.serializers.UserSerializer',可能引发字典解析异常,建议移除后重启服务测试。
修正后的配置示例:
DJOSER = { 'USER_MODEL': 'users.Users', 'LOGIN_FIELD': 'email', 'PASSWORD_RESET_CONFIRM_URL': '{}/password/reset/{uid}/{token}', 'ACTIVATION_URL': '#/activate/{uid}/{token}', 'SEND_ACTIVATION_EMAIL': True, 'SEND_CONFIRM_EMAIL': False, 'USER_AUTHENTICATION_RULES': ['djoser.auth.authentication.UserAuthentication'], 'SERIALIZERS': {'user_create': 'users.serializers.UserSerializer'} }
二、激活邮件未发送且无报错
针对Djoser不发送激活邮件的问题,可从以下方向排查:
- 验证邮件基础配置:检查
settings.py中的邮件服务配置是否正确,示例配置如下:
若使用默认的EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' EMAIL_HOST = 'your-smtp-host' # 如smtp.gmail.com EMAIL_PORT = 587 EMAIL_USE_TLS = True EMAIL_HOST_USER = 'your-email@example.com' EMAIL_HOST_PASSWORD = 'your-email-password-or-app-password'console.EmailBackend,邮件只会打印到控制台而非实际发送,需切换为SMTP后端。 - 确认用户模型合规性:确保自定义
users.Users模型继承AbstractUser或AbstractBaseUser,且包含唯一的email字段(与LOGIN_FIELD = 'email'匹配),模型字段缺失会导致Djoser无法触发邮件逻辑。 - 检查Djoser版本兼容性:部分旧版Djoser对
ACTIVATION_URL格式或SEND_ACTIVATION_EMAIL触发逻辑有特殊要求,建议升级到最新稳定版后重试。 - 排查信号与中间件干扰:临时禁用项目中的自定义信号处理函数或中间件,测试邮件是否正常发送,避免自定义代码拦截Djoser的邮件信号。
- 测试邮件服务可用性:运行命令
python manage.py sendtestemail your-test-email@example.com,验证邮件服务器是否能正常发送,排除网络或服务器配置问题。
内容的提问来源于stack exchange,提问作者Александр Пасмурнов
相关产品推荐
相关产品推荐

