绑定微博用户接口

1.微博绑定用户接口

1.1 oauth/urls.py 中添加路由
urlpatterns = [
     path('weibo/binduser/', views.OauthWeiboBindUser.as_view()), # /oauth/weibo/callback/ 
]
1.2 oauth/views.py 中添加试图函数
from urllib.parse import urlencode

from django.contrib.auth.hashers import make_password
from django.shortcuts import render

# Create your views here.
from rest_framework.response import Response
from rest_framework.views import APIView
import json

from oauth.models import OauthUser
from user.models import User
from utils.MyBaseVIew import create_token


class WeiBoURL(APIView):

    def post(self, request):
        url = 'https://api.weibo.com/oauth2/authorize?'  # 微博授权的 url地址
        data = {
            'client_id': '3166523685',
            'response_type': 'code',
            'redirect_uri': 'http://127.0.0.1:8888/oauth/callback/',
        }
        weibo_url = url + urlencode(data)
        return Response({'code': '0', 'msg': '成功', 'data': {'url': weibo_url}})


class WeiBocallback(APIView):
    def post(self, request):
        code = request.data.get("code")
        data = {
            'client_id': '3166523685',
            'client_secret': 'c4f70f86720d9ca56491890fd90e925b',
            'grant_type': 'authorization_code',
            'code': code,
            'redirect_uri': 'http://127.0.0.1:8888/oauth/callback/'
        }
        url = "https://api.weibo.com/oauth2/access_token"
        import requests
        weibo_data = requests.post(url=url, data=data)
        print(type(weibo_data))
        json_weibo_data = weibo_data.json()
        uid = json_weibo_data.get("uid")
        if uid:
            try:
                uid_user = OauthUser.objects.get(uid=uid)
                res_data = {
                    'code': 0,
                    "msg": "授权成功",
                    "data": {
                        "type": 0,
                        "uid": uid,
                        "username": uid_user.user.username,
                        "token": create_token(uid_user.user)
                    }
                }
                return Response(res_data)
            except Exception as e:
                res_data = {
                    'code': 0,
                    "msg": "授权成功",
                    "data": {
                        "type": 1,
                        "uid": uid,
                    }
                }
                return Response(res_data)
        else:
            return Response({"code": 999, "msg": "获取微博信息失败"})


class WeiBoBindUser(APIView):
    def post(self, request):
        oauth_type = 1
        username = request.data.get("username")
        password = request.data.get("passwoed")
        weibo_uid = request.data.get("weibo_uid")
        if all([username, password, weibo_uid]):
            return Response({"code": 4005, "msg": "参数不全"})
        try:
            user = User.objects.get(username=username)
            oauthinfo = OauthUser.objects.create(uid=weibo_uid, oauth_type=oauth_type, user=user)
            data = {
                "authenticcated": True,
                "id": user.id,
                "role": None,
                "name": user.nick_name,
                "username": username,
                "email": user.email,
                "token": create_token(user),
                "type": 0
            }
            res_data = {
                "code": 0,
                "msg": "登录成功",
                "data": data
            }
            return Response(res_data)
        except Exception as e:
            password = make_password(password)
            user = User.objects.create(username=username, password=password)
            oauthinfo = OauthUser.objects.create(uid=weibo_uid, oauth_type=oauth_type, user=user)
            data = {
                "authenticcated": True,
                "id": user.id,
                "role": None,
                "name": user.nick_name,
                "username": username,
                "email": user.email,
                "token": create_token(user),
                "type": 0
            }
            res_data = {
                "code": 0,
                "msg": "登录成功",
                "data": data
            }
            return Response(res_data)
oatuth/views.py

 

posted @ 2020-10-11 19:35  王彬。  阅读(188)  评论(0)    收藏  举报