我用Django搭网站(1)-新浪微博登录
新浪微博第三方登录使用的是OAuth2.0,开发前提已经注册开发者帐号,是开发者。
OAuth简介
OAuth: OAuth(开放授权)是一个开放标准,允许用户授权第三方网站访问他们存储在另外的服务提供者上的信息,而不需要将用户名和密码提供给第三方网站或分享他们数据的所有内容。
具体开发步骤
第一步:准备阶段
打开微博开发平台,并登录你的新浪微博账号。再点击导航上的“微链接”--> “网站接入”。



创建完应用后再基本信息里就可以拿到App Key和App Secret。在开发阶段可以直接拿来使用,如果网站上线需要完善等级信息。


微博第三方登录的大体步骤:先跳转到用户登录界面,同意后回调到填写的回调页面,获得code码,通过code码获取access_token,其中包含用户的唯一表示uid。
第一步:具体开发

- 创建web应用
创建完成之后,打开models.py文件,编写模型:
class Users(models.Model):
uid = models.CharField(max_length=64, null=True) # 微博的关联uid
nickname = models.CharField(max_length=30, null=True) # 用户昵称
head = models.CharField(max_length=100, null=True) # 用户头像
sex = models.CharField(max_length=2, null=True) # 性别
register_time = models.DateTimeField('保存日期') # 注册时间
register_ip = models.CharField(max_length=30, null=True) # 注册ip
last_time = models.DateTimeField('最后修改日期') # 最后一次登录时间
模型用于存储微博登录返回的uid值。这个uid是与微博一一对应。
在总的urls路由中,加入对应应用路由。
from django.contrib import admin
from django.urls import include, path
urlpatterns = [
path('login/', include('login.urls')), # 登录模块
]
打开对应应用目录下urls.py文件,填写对用的路由:
from django.urls import path
from . import views
urlpatterns = [
path('oauth/weibo/login', views.weibo_login), # 微博授权页面
path('weibo/connect/callback.php', views.weibo_get_code), # 微博回调页面
]
oauth/weibo/login和weibo/connect/callback.php,分别是打开授权页面和回调地址。
大致步骤是授权之后,得到uid。判断这个uid是否存在数据库中。若存在,则直接登录对应的用户即可;若不存在,则获取调取获取用户信息的新浪接口,获取用户信息。
- 开发登录模块
1.在工程目录settings.py中设置常量
'''微博登录常量'''
WEIBO_APP_ID = "App Key"
WEIBO_APP_KEY = "App Secret"
WEIBO_REDIRECT_URI = "回调地址"
2.在对应应用的文件夹下创建wb_oauth.py文件,编辑wb_oauth.py文件:
import requests
import json
class OAuthWB:
def __init__(self, client_id, client_key, redirect_uri):
self.client_id = client_id
self.client_key = client_key
self.redirect_uri = redirect_uri
def get_access_token(self, code): # 获取用户token和uid
url = "https://api.weibo.com/oauth2/access_token"
querystring = {
"client_id": self.client_id,
"client_secret": self.client_key,
"grant_type": "authorization_code",
"code": code,
"redirect_uri": self.redirect_uri
}
response = requests.request("POST", url, params=querystring)
return json.loads(response.text)
def get_user_info(self, access_token_data):
url = "https://api.weibo.com/2/users/show.json"
querystring = {
"uid": access_token_data['uid'],
"access_token": access_token_data['access_token']
}
response = requests.request("GET", url, params=querystring)
return json.loads(response.text)
3.编辑对应应用的文件夹下views.py文件:
from .wb_oauth import OAuthWB
from django.conf import settings # 引入常量
def weibo_login(request):# 跳转授权页面
return HttpResponseRedirect(
'https://api.weibo.com/oauth2/authorize?client_id=' + settings.WEIBO_APP_ID + '&redirect_uri=' + settings.WEIBO_REDIRECT_URI)
def weibo_get_code(request):
"""登录之后,会跳转到这里。需要判断code和state"""
code = request.GET.get('code', None)
sina = OAuthWB(settings.WEIBO_APP_ID,
settings.WEIBO_APP_KEY,
settings.WEIBO_REDIRECT_URI)
user_info = sina.get_access_token(code)
time.sleep(0.1) # 防止还没请求到token就进行下一步
# 通过uid查询出是否是新用户,新用户则注册登录
is_user_exist = models.Users.objects.filter(uid=user_info['uid']).first()
if is_user_exist is not None:
# 存在直接登录
pass
else:
#不存在获取用户信息
new_user_info = sina.get_user_info(user_info)
users_dict = {
"uid": new_user_info['id'],
'description': new_user_info['description'],
"head": new_user_info['profile_image_url'],
"nickname": new_user_info['name'],
}
users_table_obj = models.Users.objects.create(**users_dict).id
注:获取邮箱地址的接口是属于高级权限,需要先通过审核,然后在我的应用中的接口管理中申请。新浪提供的API测试页面。
我用Django搭网站(1)-新浪微博登录的更多相关文章
- 我用Django搭网站(2)-QQ登录
接入QQ登录前,网站需首先进行申请,获得对应的appid与appkey,以保证后续流程中可正确对网站与用户进行验证与授权. 第一步:准备阶段 打开QQ互联,并登录你的QQ账号.再点击导航上的" ...
- 我用Django搭网站(3)-表单RSA加密
之前开发项目时因为种种原因一直使用明文提交,表单直接明文提交非常不安全,只要稍加操作就能轻易获取用户的信息.在众里寻他千百度之后决定使用RSA加密方式,简单可靠. 项目准备 一.安装PyCrypto库 ...
- 第三方登录 QQ登录 人人网登录 新浪微博登录
http://www.pp6.cn/Index.aspx http://www.pp6.cn/Login.aspx 网站有自己的账号系统,这里使用的第三方登录仅仅是获取第三方账号的唯一id,昵称,性别 ...
- 新浪微博登录接口(PHP版)
CI框架下 新浪微博登录接口完整版说明:本贴只适合CI框架.功能实现:登录接口跳转链接成功,获取用户信息(包括最重要的u_id)成功,将用户与本地平台连接起来,用户登录成功后信息的存储,本地数据库第三 ...
- [从零开始搭网站七]CentOS上安装Mysql
点击下面连接查看从零开始搭网站全系列 从零开始搭网站 通过前面6章,我们买好了服务器,配置了服务器连接,服务器上配置了JDK和Tomcat,准备了域名(这个我没教,自己去阿里/百度/腾讯买,买东西我相 ...
- [从零开始搭网站二]服务器环境配置:Mac电脑连接CentOS不用每次都输入密码
上一篇讲了如何购买服务器,并且***.看这里的第一篇文章: 从零开始搭网站 从这里开始的文章,我会默认大家都是最起码是入门级的程序员,如果你完全不懂我在说什么,那就退出好了. 作为开发人员,接下来为了 ...
- Django中的Cookie--实现登录
Django中的Cookie--实现登录 Django Cookie Cookie Cookie 是什么 保存在浏览器端的键值对,让服务器提取有用的信息. 为什么要有 Cookie 因为HTTP请求 ...
- qq登录,新浪微博登录 ,接口开发
给linux命令在线中文手册加了,qq登录和新浪微博登录,认证用的是auth2.0,并且用了js api和php api相结合的方式来做的.个人觉得这种方式,兼顾安全和人性化.以前写过一篇关于申请的博 ...
- qq登录,新浪微博登录接口申请过程中遇到的问题
接口申请下来了,开发很容易的,参数传到就可以了.以前就做过这方面的开发,但是申请还是第一次,网上有关这方面的东东不是很多,所以记录一下申请过程. 1,qq登录接口申请 申请地址是:http://con ...
随机推荐
- 机器人操作系统(ROS)教程22:ROS的3D可视化工具—rviz
rviz是ROS中的一个3D可视化工具,有了它就可以把你用代码建的机器人模型转化为可视的3D模型. 首先需要安装: rosdep install rviz 然后编译rviz: rosmake rviz ...
- AzureStack混合云大数据解决方案
AzureStack是Azure的私有云解决方案.AzureStack可以帮助用户实现混合云的部署模式. 本文将介绍混合云的模式下,Azure作为计算资源,AzureStack作为存储资源.如下图: ...
- Instantiate实例化的注意事项
_obj= Resources.Load("xxx") as GameObject;Instantiate(_obj); 这里的_obj对象和 _obj= Instantiate( ...
- unittest框架,调用函数类 和 调用函数外的 方法
- angular 本地存储
localStorage四种方法: localStorage.getItem(key):获取指定key本地存储的值localStorage.setItem(key,value):将value存储到ke ...
- 为工具箱添加CSKin选项卡
如何使用CSKin 项目的引用→右键→添加; 找到SCKin.dll; 添加引用 工具箱新建一个选项卡; 工具箱的空白处→右键→添加选项卡→SKinControl, 将刚才的CSKin.dll 直接拖 ...
- MMU段式映射(VA -> PA)过程分析
MMU:内存管理单元. CPU寻址的方式: 未使用MMU:CPU发出地址(PA) 直接内存寻址(SDRAM or DDRx). 使用MMU :CPU发出地址(VA) MMU接收CPU发来的地址 经过 ...
- 实战MvcPager(PagerOptions自定义样式&同、异步)
ASP.NET MVC下的分页控件MvcPager用起来简直太嗨呸了,两句代码实现一个分页,而且需要改变样式的时候直接构造PagerOptions类 实战无需多说,拿来用之即可.个人觉得对性能影响不大 ...
- Py修行路 python基础 (十九)面向对象进阶(下)
item系列 __slots__方法 __next__ 和 __iter__实现迭代器 析构函数 上下文管理协议 元类一.item系列 把对象操作属性模拟成字典的格式. 例如:对象名['key'] ...
- Node.js实用知识点
本文介绍如何使用nodejs 简单的HttpServer 调试nodejs 基础路由 nodejs配置开发和生产环境 nodejs核心模块一览 express用法 文件I/O nodejs模块 nod ...