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

Django2.1集成Twitter认证后获取头像失败,遇ModuleNotFoundError

解决Twitter认证后获取头像的ModuleNotFoundError及关联问题

我看你这问题主要出在两个地方:pipeline路径配置错了,还有用户模型关联的引用不对,咱们一步步来搞定:

1. 先修复ModuleNotFoundError错误

从你的项目目录结构能清楚看到,pipeline.py是直接放在myapp根目录下的,根本没有myapp/users这个子目录,但你在settings.py里把pipeline路径写成了'myapp.users.pipeline.get_avatar',Django自然找不到这个模块。

直接修改settings.py里的SOCIAL_AUTH_PIPELINE配置,把最后一行改成:

'myapp.pipeline.get_avatar',

这样Django就能正确定位到你写的get_avatar函数了。

2. 修复用户头像关联的引用错误

你的模型里和User做OneToOne关联的是Myapp类,而且没设置related_name,所以User实例的反向关联默认是myapp(小写模型名),不是你代码里写的profile,直接用user.profile会触发AttributeError。

另外还要考虑新用户的情况——第一次登录的Twitter用户可能还没创建对应的Myapp实例,所以用get_or_create来确保实例存在:
修改pipeline.py里的函数:

from myapp.models import Myapp  # 别忘了导入模型

def get_avatar(backend, strategy, details, response, user=None, *args, **kwargs):
    url = None
    if backend.name == 'twitter':
        # 替换掉_normal后缀获取高清头像
        url = response.get('profile_image_url', '').replace('_normal', '')
    if url:
        # 确保关联的Myapp实例存在,不存在就创建
        myapp_profile, created = Myapp.objects.get_or_create(user=user)
        myapp_profile.avatar = url
        myapp_profile.save()

最后再做个小检查

  • 记得执行python manage.py makemigrations和python manage.py migrate,确保Myapp模型的数据库表已经正确创建;
  • 确认Twitter API的权限配置没问题,基础权限就能拿到profile_image_url这个字段,不用额外申请。

这样改完之后,应该就能正常获取并保存Twitter用户的头像了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:26:13