问题
使用social_core过程中,存储的username一直都是一串字符串,而并非是微信的username,
后来仔细研究一下才明白,username就相当于id,属于唯一字符串,所以也就不是直接将微信
的昵称copy过来座位username,那么就只能使用其他字段来记录微信昵称。
#就这点东西研究了三个小时,我也是醉醉的,看别人的代码真是很难,
#要看懂功能、逻辑、调用关系、哪里入库、那里拦截
这里使用的是nickname。
下图中,第一条是没有加nickname之前,username我修改过,不然就还是一串字符串
第二条的nickname已经通过微信加载进来了
解决方案:
social_core、social_django 源码只获取useranme一个字段,所以这里要添加一下
方案1:失败的,应该是数据的结构问题,没有太多时间去处理,看到失败,就没有继续下去
修改 social_core/pipeline/user.py 顶部的 USER_FIELDS
原:USER_FIELDS = ['username', 'email']
修改后:USER_FIELDS = ['username', 'email', 'nikename']
由于最后出现的数据结构类似于
{"username":"830912830192","response":{"nickname":"小喵喵"}}
nickname和username根本就不在同一级别。 # user.py create_user fields
方案2:测试成功
# 当然我知道这样直接改源码的方式不太好但是暂时可以用了,后续再看怎么改一下吧
修改 social_core/pipeline/user.py create_user
在fields下方添加如下代码
#add by shen 2017-11-15 03:18:29
nick_dict = kwargs.get('response')
fields['nick_name'] = nick_dict.get('nickname',None)
social_core github:https://github.com/python-soc…