微博三方的一个整体思路
微博配置
1、先搜索微博开放平台,
2、上方栏有个微链接,将鼠标放上去会展示出一个网站接入WEB,
3、点开网站接入,点击立即接入
4、点进去以后申请你接下来需要的应用,应用分类就用网页应用就好。
5、保存一下App Key和App Secret
6、点开下面的高级信息设置你的授权回调页和取消授权回调页。(这里解释一下授权回调页,它就是你跳到微博授权页面,授权完跳到的页面)
微博文档
1、我们一开始点击的微链接右边有个文档点击进去,往下翻找到“OAuth2.0授权认证”,点击进去。 (“OAuth2.0授权认证”,用来获取code码)
2、进去“OAuth2.0授权认证”以后,往下翻找到接口文档, 先点开“OAuth2/authorize”,这是用来获取code码。点开里面有详细的授权的地址、要携带的参数和返回的参数。
3、然后我们退出来在点击“OAuth2.0授权认证”下面的“OAuth2/access_token”, (“OAuth2/access_token”, 拿code码获取token和微博的uid)
4、点击进去“OAuth2/access_token”,接下的步骤跟点开“OAuth2.0授权认证”的步骤是一样的
我是用的的Django,我在请求方法中用requests再次请求,
代码:json_data = requests.post(url=url, data=data).json()
下面是我Django的代码,希望对大家有所帮助。
settings.py:
WB_AK = 'XXXXX' # 博客配置的AK
WB_SK = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' # 博客配置的SK
WEIBO_CALL_BACK = "http://127.0.0.1:8080/oauth/callback/" # 授权以后回调的地址
views.py:
# 通过授权地址,请求微博返回的code
class WBURLVoew(APIView):
def get(self, request):
url = "https://api.weibo.com/oauth2/authorize?" # 授权的地址,因为需要携带参数,所以后面带个问号
weibo_url = url + 'client_id=WB_AK&response_type=code&redirect_uri=http://127.0.1:8080/oauth/callback/' # 我这个方法比较笨,但是直接写自动拼接,我自动拼接当的时候不知道哪里没有写好细节,路由一直乱码,我就用的手动拼接
print(weibo_url)
return Response({
'code': 0,
'msg': '成功',
'url': weibo_url
})
# 通过微博授权的code码去微博换取token值
class CallbackView(APIView):
def get(self, request):
code = request.GET.get('code')
print(code)
data = { # 携带的参数
'client_id': WB_AK,
'client_secret': WB_SK,
'grant_type': 'authorization_code',
'code': code,
'redirect_uri': WEIBO_CALL_BACK
}
url = 'https://api.weibo.com/oauth2/access_token' # 换取token值得地址
try:
json_data = requests.post(url=url, data=data).json() # 发送post请求,然后转码
uid = json_data['uid'] # 获取uid
uid_user = oauth.OauthUser.objects.filter(uid=uid)
if uid_user:
res_data = {
'code': 0,
'msg': '授权成功',
'data': {
'type': 0, # 用来判断是否是第一次登陆,用来做绑定
'uid': uid,
}
}
return Response(res_data)
else:
res_data = {
'code': 0,
'msg': '授权成功',
'data': {
'type': 1,
'uid': uid,
}
}
return Response(res_data)
except Exception as e:
return Response({
'msg': '没有code',
'code': 4005
})
# 如果是第一次登陆做绑定
class UserView(APIView):
def post(self, request):
uid = request.data.get('user')
username = request.data.get('username')
password = request.data.get('password')
print(request.data)
user_obj = user.User.objects.filter(username=username)
try:
if user_obj:
return Response({'msg': '用户名已存在', 'code': 4005})
new_password = make_password(password)
user_cre = user.User.objects.create(username=username, password=new_password)
user_get = user.User.objects.get(username=username)
print(user_get.id)
oauth_cre = oauth.OauthUser.objects.create(uid=uid, user_id=user_get.id, oauth_type=1)
return Response({
'msg': '绑定成功',
'code': 200
})
except Exception as e:
print(e)
return Response({'msg': '卡卡', 'code': 4009})