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
相关产品推荐
相关产品推荐

