最新版-----新浪微博的第三方登录

news/2024/11/16 23:32:01/

完成三方登录三步骤:定义抽象类,定义实现具体功能类,定义视图类

流程图: 

 

 

定义抽象类: 

首先导入模块:

# 导入
from abc import ABCMeta,abstractmethod

再定义抽象类:

# 抽象类  三方登录抽象类
class IdProvider(metaclass=ABCMeta):# 生成跳转的url
    @abstractmethoddef get_url(self):pass# 获取token
    @abstractmethoddef get_token(self, code):pass# 获取用户信息
    @abstractmethoddef get_user(self, token, uid):pass# 保存用户信息
    @abstractmethoddef save_user(self,user):pass

定义实现具体功能类:

1.获取token的路由:

请求用户授权Token

2.获取授权过的token:

获取授权过的Access Token

3.获取授权过的用户信息

获取用户信息

# 实现具体功能类
class SinaProvider(IdProvider):def __init__(self):self.client_id = "3440988304"self.client_secret = "15dde1e8af983da29490e5ac5de10f55"self.call_back = "http://127.0.0.1:8000/weibo_back/"def get_url(self):return "https://api.weibo.com/oauth2/authorize?client_id=%s&redirect_uri=%s" % (self.client_id,self.call_back)def get_token(self, code):data = {"client_id":self.client_id,"client_secret":self.client_secret,"grant_type":"authorization_code","code":code,"redirect_uri":self.call_back}res = requests.post('https://api.weibo.com/oauth2/access_token', data=data)print(res.text)return res.json()["access_token"],res.json()["uid"]def get_user(self, token, uid):data = {"access_token": token, "uid": uid}res = requests.get("https://api.weibo.com/2/users/show.json", params=data, timeout=25)print(res.text)return {"name": res.json()["name"], "avtar": res.json()["profile_image_url"]}

微博API接口文档: 获取用户信息

 

 

定义视图类:

# 视图类
class Sina(BaseHandler):def __init__(self,*args,**kwargs):super(Sina,self).__init__(*args,**kwargs)# 实例化self.sina = SinaProvider()async def post(self):# 获取urlurl = self.sina.get_url()self.finish({"errcode":0,"url":url})async def get(self):code = self.get_argument('code',None)# 获取新浪tokentoken,uid = self.sina.get_token(code)# 获取用户信息user = self.sina.get_user(token,uid)self.finish({"user":user})

打印出的结果为:

 然后将获得的用户信息存入数据库:

导入database:

from db import database

写在具体功能类下:

# 实现具体功能类
class SinaProvider(IdProvider):def __init__(self):self.client_id = "3440988304"self.client_secret = "15dde1e8af983da29490e5ac5de10f55"self.call_back = "http://127.0.0.1:8000/weibo_back/"self.database = peewee_async.Manager(database)def get_url(self):return "https://api.weibo.com/oauth2/authorize?client_id=%s&redirect_uri=%s" % (self.client_id,self.call_back)def get_token(self, code):data = {"client_id":self.client_id,"client_secret":self.client_secret,"grant_type":"authorization_code","code":code,"redirect_uri":self.call_back}res = requests.post('https://api.weibo.com/oauth2/access_token', data=data)print(res.text)return res.json()["access_token"],res.json()["uid"]def get_user(self, token, uid):data = {"access_token": token, "uid": uid}res = requests.get("https://api.weibo.com/2/users/show.json", params=data, timeout=25)print(res.text)return {"name": res.json()["name"], "avtar": res.json()["profile_image_url"]}async def save_user(self,user):try:user = await self.database.get(UserModel.select().where((UserModel.email == user["name"]) & (UserModel.cate == 2)))except Exception as e:user = await self.database.create(UserModel, email=user["name"], password="123", state=1,avtar=user["avtar"], cate=2)return user

保存用户信息,并且重定向:

# 视图类
class Sina(BaseHandler):def __init__(self,*args,**kwargs):super(Sina,self).__init__(*args,**kwargs)# 实例化self.sina = SinaProvider()async def post(self):# 获取urlurl = self.sina.get_url()self.finish({"errcode":0,"url":url})async def get(self):code = self.get_argument('code',None)# 获取新浪tokentoken,uid = self.sina.get_token(code)# 获取用户信息user = self.sina.get_user(token,uid)# 保存用户user = await self.sina.save_user(user)# 重定向# 生成jwtmyjwt = MyJwt()# 重定向self.redirect("http://localhost:8080/tranfer?email=" + user.email + "&token=" + myjwt.encode({"id": user.id}))

 


http://www.ppmy.cn/news/574418.html

相关文章

小明发布_发布会不打算开了?网曝小米之家的小米 9 实拍

以往手机新品发布之前,厂商经常会主动曝一些料来提升热度、吸引关注,但是像小米 9 这样连续几天官方几乎一刻不停地曝料,完全把发布会搬到微博上直播的节奏,还从未见过。目前,从外观设计到硬件配置,小米 9 …

新浪微博案例

利用for循环写出新浪页面思路: 利用for循环,建立多个盒子利用点语法取出用户头像、名称、微博内容、微博插图的内容进行渲染由于微博插图有多个,所以需要在for循环中嵌套一个循环取出每一个插图的src并渲染到页面上去,这里装微博插…

安卓新浪微博授权分享 小米8Android9的坑。解决web网页授权无法正确回调bug。

微博登录,分享都是很常用的功能。正在划水的某一天,测试MM突然提了个bug,说微博分享不能用了,纳尼,之前不是测试N遍,怎么突然不能用了。 仔细一看,是这样的。手机没有安装微博客户端,会走SDK内…

新浪微博

https://api.weibo.com/oauth2/default.html 1. 引导需要授权的用户到如下地址: https://api.weibo.com/oauth2/authorize?client_idxxx&response_typecode&redirect_urihttps://api.weibo.com/oauth2/default.html 2. 如果用户同意授权,页面跳转至 YOUR_R…

小米周受资同学加盟字节跳动任CFO,雷军微博祝福

先来看看周同学,还是比较帅的 3月24日消息,今日,小米集团在港交所公告,公告称,董事会宣布,因家庭原因,周受资已辞任执行董事职务,自2021年3月24日起生效。同时周受资已请辞公司国际部…

每日新闻:雷军微博互动李东生,小米又有新动作?

生命是以时间为单位的,浪费别人的时间等于谋财害命,浪费自己的时间,等于慢性自杀。——鲁迅 中国软件网每日精选文集 中国软件网 每日新闻播报 第01-07期 1 趋 势 洞 察 ■ 工信部总经济师:五方面推动新一代信息技术产业发展 工业…

小米的隔空充电,看起来好酷

昨天是1月29号,昨天小米发布了一个隔空充电技术,很火爆,大胆想,如果有一条无线充电的高速公路,那电动汽车还担心没有电吗? —— 雷总的微博原文 隔空充电技术:如科幻电影一般,拿着手…

UE中创建可脚本化编辑器工具(Scriptable Tools)

UE5.2中提供了可脚本化工具编辑模式,该模式下用户可以编写蓝图节点自定义界面操作模式下的逻辑,例如重写鼠标点击事件,制作自定义画刷等。 如果你不太了解UE编辑器工具,可以参考这篇文章: https://blog.csdn.net/gray…