新浪微博第三方登录使用的是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)-新浪微博登录的更多相关文章

  1. 我用Django搭网站(2)-QQ登录

    接入QQ登录前,网站需首先进行申请,获得对应的appid与appkey,以保证后续流程中可正确对网站与用户进行验证与授权. 第一步:准备阶段 打开QQ互联,并登录你的QQ账号.再点击导航上的" ...

  2. 我用Django搭网站(3)-表单RSA加密

    之前开发项目时因为种种原因一直使用明文提交,表单直接明文提交非常不安全,只要稍加操作就能轻易获取用户的信息.在众里寻他千百度之后决定使用RSA加密方式,简单可靠. 项目准备 一.安装PyCrypto库 ...

  3. 第三方登录 QQ登录 人人网登录 新浪微博登录

    http://www.pp6.cn/Index.aspx http://www.pp6.cn/Login.aspx 网站有自己的账号系统,这里使用的第三方登录仅仅是获取第三方账号的唯一id,昵称,性别 ...

  4. 新浪微博登录接口(PHP版)

    CI框架下 新浪微博登录接口完整版说明:本贴只适合CI框架.功能实现:登录接口跳转链接成功,获取用户信息(包括最重要的u_id)成功,将用户与本地平台连接起来,用户登录成功后信息的存储,本地数据库第三 ...

  5. [从零开始搭网站七]CentOS上安装Mysql

    点击下面连接查看从零开始搭网站全系列 从零开始搭网站 通过前面6章,我们买好了服务器,配置了服务器连接,服务器上配置了JDK和Tomcat,准备了域名(这个我没教,自己去阿里/百度/腾讯买,买东西我相 ...

  6. [从零开始搭网站二]服务器环境配置:Mac电脑连接CentOS不用每次都输入密码

    上一篇讲了如何购买服务器,并且***.看这里的第一篇文章: 从零开始搭网站 从这里开始的文章,我会默认大家都是最起码是入门级的程序员,如果你完全不懂我在说什么,那就退出好了. 作为开发人员,接下来为了 ...

  7. Django中的Cookie--实现登录

    Django中的Cookie--实现登录 Django Cookie  Cookie Cookie 是什么 保存在浏览器端的键值对,让服务器提取有用的信息. 为什么要有 Cookie 因为HTTP请求 ...

  8. qq登录,新浪微博登录 ,接口开发

    给linux命令在线中文手册加了,qq登录和新浪微博登录,认证用的是auth2.0,并且用了js api和php api相结合的方式来做的.个人觉得这种方式,兼顾安全和人性化.以前写过一篇关于申请的博 ...

  9. qq登录,新浪微博登录接口申请过程中遇到的问题

    接口申请下来了,开发很容易的,参数传到就可以了.以前就做过这方面的开发,但是申请还是第一次,网上有关这方面的东东不是很多,所以记录一下申请过程. 1,qq登录接口申请 申请地址是:http://con ...

随机推荐

  1. sonar 获取扫描结果(二)

    1.requestHeader中添加 消息头, key:Authorization,value:用户名:密码base64加密,再拼接字符串 "Basic "+base64加密结果( ...

  2. mysql的账号管理

    mysql的账号管理 最先匹配 user 表(包含:用户列 权限列 安全列 资源控制列)连接判断:host  user password字段(user的授权是全局的): 然后匹配db表:如果只是给指定 ...

  3. Oracle LSNRCTL------监听器的启动和关闭

    对于DBA来说,启动和关闭oracle监听器是很基础的任务,但是Linux系统管理员或者程序员有时也需要在开发数据库中做一些基本的DBA操作,因此了解一些基本的管理操作对他们来说很重要. 本文将讨论用 ...

  4. xunsearch进阶使用

    目录 设置分页 设置排序 读取文档结果 搜索结果高亮处理 获取数量 获取热门搜索词 获取相关搜索词 设置分页 $search->setLimit(5); // 设置返回结果为前 5 条 $sea ...

  5. 微信小程序的基本认识

    小程序与公众号的区别 小程序,不支持关注,消息推送等营销手段. 小程序更倾向于产品,公众号更倾向于营销. 在系统权限方面,小程序能够获得更多. 小程序与APP的区别 小程序,面向微信用户.app面向所 ...

  6. 如何成为java架构师(转载)

    链接:https://www.zhihu.com/question/29031276/answer/54631312 来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 1 ...

  7. js中的Math

    js中的Math Math.round 取最接近的整数 Math.round(-2.7) // -3 Math.ceil 向上取整 Math.ceil(1.1) // 2 Math.floor 向下取 ...

  8. CRF++评测脚本CoNLL 2000

    关于CRF++工具如何使用这里就不再赘述了,网上相关资源很多,如官方提供的http://crfpp.googlecode.com/svn/trunk/doc/index.html.虽然http://w ...

  9. JavaScript之BON

    1.windows对象 全局作用域: 2.窗口关系及框架 如果页面包含框架,则每个框架都有自己的window对象,并且保存在iframes集合中,在iframe集合中,可以通过数值索引(从0开始,从左 ...

  10. Cause: java.sql.SQLException: 无效的列索引

    今天调试代码发现“Cause: java.sql.SQLException: 无效的列索引”,查资料得出结论如下: 1.sql串的?号用''括了起来. 例如:select* from user t  ...