python3Django项目——微博第三方登录
2018-12-14 21:50
127 查看
适合于python3的微博第三方登录的相关代码:
sina.py
[code]import json import urllib import re class OAuth_Base(object): #基类,将相同的方法写入到此类中 def __init__(self,client_id,client_key,redirect_url): #初始化,载入对应的应用id、秘钥和回调地址 self.client_id = client_id self.client_key = client_key self.redirect_url = redirect_url def _get(self,url,data): #get方法 request_url = '%s?%s' % (url,urllib.parse.urlencode(data)) response = urllib.request.urlopen(request_url) return response.read() def _post(self,url,data): #post方法 request = urllib.request.Request(url,data = urllib.parse.urlencode(data).encode(encoding='UTF8')) #1 response = urllib.request.urlopen(request) return response.read() #微博类 class OAuth_WEIBO(OAuth_Base): def get_auth_url(self): params = { 'client_id':self.client_id, # 'response_type':'code', 'redirect_uri':self.redirect_url, # 'scope':'email', # 'state':1 } url = 'https://api.weibo.com/oauth2/authorize?%s&state=/' % urllib.parse.urlencode(params) return url def get_access_token(self,code): params = { 'grant_type':'authorization_code', 'client_id':self.client_id, 'client_secret':self.client_key, 'code':code, 'redirect_uri':self.redirect_url } response = self._post('https://api.weibo.com/oauth2/access_token',params) result = json.loads(response.decode('utf-8')) self.access_token = result["access_token"] # self.openid = result["uid"] return self.access_token
views.py
[code]class OauthSinaloginView(APIView): """ 构建微博登录跳转链接 """ def get(self, request): # 1、创建微博对象 sina = OAuth_WEIBO(client_id=settings.WEIBO_APP_ID, client_key=settings.WEIBO_KEY, redirect_url=settings.WEIBO_CALLBACK_URL, ) # 4、构建跳转连接 login_url = sina.get_auth_url() # 5、返回跳转连接 return Response({'login_url': login_url}) class OauthSinaView(APIView): def get(self, request): # 1、获取code值 code = request.query_params.get('code', None) # 2、判断code是否传递过来 if not code: return Response({'errors': '缺少code值'}, status=400) # 3、通过code值获取access_token值 # 创建sina对象 sina = OAuth_WEIBO(client_id=settings.WEIBO_APP_ID, client_key=settings.WEIBO_KEY, redirect_url=settings.WEIBO_CALLBACK_URL, ) access_token = sina.get_access_token(code) # return Response({'access_token':access_token}) # 4、将access_token赋值给wb_openid wb_openid = access_token # 5、判断access_token是否绑定过用户 try: sina_user = OAuthQQUser.objects.get(wb_openid=wb_openid) except: # 6、未绑定,进入到绑定页面完成绑定 tjs = TJS(settings.SECRET_KEY, 300) wb_openid = tjs.dumps({'wb_openid': wb_openid}).decode() return Response({'access_token': wb_openid}) else: # 7、绑定过,则登录成功 # 生成JWT-token值 user = sina_user.user jwt_payload_handler = api_settings.JWT_PAYLOAD_HANDLER jwt_encode_handler = api_settings.JWT_ENCODE_HANDLER payload = jwt_payload_handler(user) # 生成载荷部分 token = jwt_encode_handler(payload) # 生成token response=Response( { 'token': token, 'username': user.username, 'user_id': user.id } ) return response # def post(self,request): # # # 绑定保存 # OAuthQQUser.objects.create(user=user,wb_openid=wb_openid) def post(self, request): # 1、获取前端数据 data = request.data # 2、验证数据 ser = OauthSinaSerializers(data=data) ser.is_valid() print(ser.errors) # 3、绑定保存数据 ser.save() # 4、返回结果 return Response(ser.data)
相关文章推荐
- django项目微博第三方登录
- QQ微信微博第三方登录接入流程-JAVA项目
- 微博第三方登录使用social_django实现显示登陆的用户名
- django 注册、登录及第三方接口程序(4):扩展邮箱注册,登录,微博登录
- 第四百零四节,python网站第三方登录,social-auth-app-django模块,
- 年薪20万Python工程师进阶(1):Django-第三方登录框架
- django 注册、登录及第三方接口程序(4):扩展邮箱注册,登录,微博登录
- 微博第三方登录
- IOS项目集成ShareSDK实现第三方登录、分享、关注等功能。
- python例子-Django项目中的模版特性
- python使用Pycharm创建一个Django项目
- 【Demo】QQ,github,微博第三方社交登录
- 【Demo】QQ,github,微博第三方社交登录
- nginx+uwsgi+django部署python项目
- python+django(创建项目)
- IOS项目集成ShareSDK实现第三方登录、分享、关注等功能。
- 如何开发合格的 Python/Django 第三方 Package
- 对Python的Django框架中的项目进行单元测试的方法
- Android使用ShareSDK集成QQ、微信、微博等第三方登录
- python3开发进阶-Django框架学习前的小项目(一个简单的学员管理系统)