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

使用rest-auth注册无法发送确认邮件,触发AttributeError异常

解决Django REST Framework中/rest-auth/registration/路径的AttributeError问题

嘿,我来帮你搞定这个头疼的错误!你遇到的AttributeError: module 'users' has no attribute 'get_full_name()',其实和模板用法、用户模型配置这两个关键点有关,咱们一步步拆解解决:

问题根源拆解

错误出在email_confirmation_message.txt模板第2行的{% user_display user.email as user_display %}代码上:

  1. user_display是django-allauth提供的模板标签,它需要接收用户对象作为参数,但你传的是user.email(字符串类型),标签内部尝试调用对象的get_full_name()方法,自然会报错。
  2. 另外请求里显示用户是AnonymousUser,说明在发送确认邮件的环节,可能没有正确传递已创建的用户实例,或者你的自定义用户模型缺失了必要的方法。

具体解决方案

  • 修正模板标签的用法
    把模板第2行的代码改成正确的形式,直接传递用户对象:

    {% user_display user as user_display %}
    

    这样user_display会自动调用用户对象的get_full_name()方法(如果存在),或者 fallback 到用户名/邮箱。

  • 确保自定义用户模型实现了get_full_name()
    如果你用了自己的users.User模型(不是Django默认的AbstractUser),一定要手动实现这个方法。比如在users/models.py里:

    from django.contrib.auth.models import AbstractBaseUser, BaseUserManager
    
    class User(AbstractBaseUser):
        # 你的自定义字段,比如email、first_name等
        email = models.EmailField(unique=True)
        first_name = models.CharField(max_length=100)
        last_name = models.CharField(max_length=100)
    
        # 其他必要配置...
    
        def get_full_name(self):
            # 可以根据你的需求返回,比如姓名组合或者邮箱
            return f"{self.first_name} {self.last_name}"
            # 如果没有姓名字段,直接返回邮箱也可以:return self.email
    

    要是你继承的是AbstractUser,这个方法默认已经存在,就不用额外写了。

  • 排查注册视图的用户传递逻辑
    检查rest-auth/registration相关的视图配置,确保用户注册成功后,把有效的用户实例传递给邮件模板上下文,而不是匿名用户。比如自定义注册视图时,要确保创建用户后正确传入user变量。

小排查技巧

可以先在模板里加一行调试代码:

{{ user }} --- {{ user.__class__ }}

发送测试邮件后看看输出,确认传递的是不是真实的用户实例,而不是字符串或者AnonymousUser,这能帮你快速定位问题点。

内容的提问来源于stack exchange,提问作者Hemant Kumar Dixit

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:16:05