如何解决Django Allauth 65.5.0中USERNAME_REQUIRED与EMAIL_REQUIRED字段弃用的UserWarnings警告
如何解决Django Allauth 65.5.0中USERNAME_REQUIRED与EMAIL_REQUIRED字段弃用的UserWarnings警告
嗨,我来帮你搞定这个警告问题!首先得搞清楚为什么会出现这些提示:Django Allauth 65.0+版本彻底重构了注册字段的配置逻辑,原来全局的USERNAME_REQUIRED和EMAIL_REQUIRED设置已经被弃用,转而要求通过ACCOUNT_SIGNUP_FIELDS的字典格式来精细控制每个字段的必填性。
虽然你已经设置了带*的列表格式(比如"email*")来标记必填字段,但Allauth内部的一些逻辑或者你用到的依赖库(比如dj-rest-auth)可能还在检查旧的全局设置,所以触发了这些警告。下面给你两个解决方案,优先推荐第一个:
方案一:改用字典格式配置ACCOUNT_SIGNUP_FIELDS(从根源解决)
把你当前的列表式配置替换成更明确的字典格式,直接指定每个字段的必填状态,这样完全符合Allauth新的规范,就能彻底消除警告。
修改settings.py中的相关配置:
# 替换原来的列表格式 ACCOUNT_SIGNUP_FIELDS = { "email": {"required": True}, "password1": {"required": True}, "password2": {"required": True}, "username": {"required": False}, # 因为你用邮箱登录,不需要用户名字段 } # 保留你已有的其他配置 ACCOUNT_LOGIN_METHODS = {"email"} ACCOUNT_EMAIL_VERIFICATION = "mandatory"
这样配置后,不仅能实现你需要的邮箱注册、邮箱验证功能,还完全适配了Allauth的新规则,警告自然就消失了。
方案二:临时忽略警告(过渡方案,不推荐)
如果暂时因为依赖库未更新等原因无法修改配置,可以在settings.py的最开头添加代码来过滤特定警告:
import warnings # 忽略Allauth的这两个弃用警告 warnings.filterwarnings( "ignore", message="app_settings.USERNAME_REQUIRED is deprecated, use: app_settings.SIGNUP_FIELDS['username']['required']" ) warnings.filterwarnings( "ignore", message="app_settings.EMAIL_REQUIRED is deprecated, use: app_settings.SIGNUP_FIELDS['email']['required']" )
这个方法只是“隐藏”警告,并没有解决根本问题,所以优先推荐方案一,这样你的配置也更规范。
备注:内容来源于stack exchange,提问作者Faith Baghan
相关产品推荐
相关产品推荐

