1.微博回调接口
1.1 oauth/urls.py中添加路由
urlpatterns = [ path(‘weibo/callback/‘, views.OauthWeiboCallback.as_view()), # /oauth/weibo/callback/ ]
1.2 oauth/views.py中添加试图函数
from user.models import User from .models import OauthUser from rest_framework_jwt.serializers import jwt_payload_handler,jwt_encode_handler from user.utils import jwt_response_payload_handler class OauthWeiboBindUser(APIView): permission_classes = (AllowAny,) def post(self,request): username=request.data.get(‘username‘) password=request.data.get(‘password‘) weibo_uid=request.data.get(‘weibo_uid‘) if not all([username,password,weibo_uid]): return Response({‘code‘:999,‘msg‘:‘参数不全‘}) try: user=User.objects.get(username=username) except Exception as e: user=None if user: if user.check_password(password): ou=OauthUser(uid=weibo_uid,user=user,oauth_type=‘1‘) ou.save() payload=jwt_payload_handler(user) token=jwt_encode_handler(payload) data=jwt_response_payload_handler(token,user) data[‘type‘]=‘0‘ return Response({‘code‘:0,‘msg‘:‘登录成功‘,‘data‘:data}) else: return Response({‘code‘:999,‘msg‘:‘密码错误‘}) else: user=User(username=username) user.set_password(password) user.save() ou=OauthUser(uid=weibo_uid,user=user,oauth_type=‘1‘) ou.save() payload=jwt_payload_handler(user) token=jwt_encode_handler(payload) data=jwt_response_payload_handler(token,user) data[‘type‘]=‘0‘ return Response({‘code‘:0,‘msg‘:‘登录成功‘,‘data‘:data})
1.3 oauth/models.py中添加用户绑定模型
# 把三方的用户信息,和本地的用户信息进行绑定 class OauthUser(models.Model): OAUTHTYPE = ( (‘1‘, ‘weibo‘), (‘2‘, ‘weixin‘), ) uid = models.CharField(‘三方用户id‘, max_length=64) # 三方用户id user = models.ForeignKey(‘user.User‘, on_delete=models.CASCADE) # 本地用户外键,关联User表 oauth_type = models.CharField(‘认证类型‘, max_length=10, choices=OAUTHTYPE) # 1,2 ...
1.4 迁移数据库
python manager.py makemigrations
python manager.py migrate
原文:https://www.cnblogs.com/xiaoxiamiaichiyu/p/13797662.html