开发准备

开通微博开发者权限

点击这里 进入 微博开放平台

开通后权限后创建应用

创建网页应用, 此处不需要进行审核即可使用测试环境

开发环境信息

此处一些信息是很重要的东西, 比如 App_key 以及 App_Serert

配置互传接口

回调页面也进行设置, 之后要用此接口进行信息回传

文档说明

基于 OAuth2.0 协议进行认证, 点击此文档

重点接口

授权以及token

授权接口使用

点击这里 官方说明

通过阅读官方说明得知是 可以以 get/post 方式进行请求. URL 的生成和支付宝类似, 但是不需要加密

因此会简单很多, 注意看必填字段即可

生成请求地址

直接使用拼接即可生成 url 进行访问

def get_auth_url():
weibo_auth_url = "https://api.weibo.com/oauth2/authorize"
redirect_url = "http://127.0.0.1:8000/complete/weibo/"
auth_url = weibo_auth_url + "?client_id={0}&redirect_uri={1}".format("3470xxx2804", redirect_url) print(auth_url)

成功请求

根据生成的 url 访问, 会跳转到 微博提供的登录授权页面,然后登录后

会跳转到一个链接地址, 并且参数会提供一串 code

Token接口使用

点击这里查看 官方文档说明

查阅官方说明可见, 此接口方式必须是 post 方式且需要提供之前 授权接口拿到的 token 才可以可以进行使用

发送请求

利用 request 进行 post 的请求

def get_access_token(code="cbf6cccccccccccc6f8e7df1a9dd1c7"):
access_token_url = "https://api.weibo.com/oauth2/access_token"
import requests
re_dict = requests.post(access_token_url, data={
"client_id": "347nnnnn04",
"client_secret": "836c9d55a8xxxxxxxa5e2d08b77c8c31bd1",
"grant_type": "authorization_code",
"code": code,
"redirect_uri": "http://127.0.0.1:8000/complete/weibo/"
})
pass

请求回传

请求回传中可以拿到一串认证信息 , 包括 uid,以及 access_token , 至此算是授权登录成功, 基于这些信息才可以进行其他必须登录后的访问操作

测试授权后操作验证

编写一个访问用户信息的接口进行生成操作, 用户信息接口官方文档如下  点击这里

访问成功后的回传数据, 可见测试成功

social-auth-app-django

别人造的轮子又大又圆

social-auth-app-django 组件已经集成好了我们上面的那一堆繁琐的操作

github 点这里

官方文档 点这里

安装

From pypi:

$ pip install social-auth-app-django
And for MongoEngine ORM: $ pip install social-auth-app-django-mongoengine

注册

Add the application to INSTALLED_APPS setting, for default ORM:

INSTALLED_APPS = (
...
'social_django',
...
) And for MongoEngine ORM: INSTALLED_APPS = (
...
'social_django_mongoengine',
...
)

迁移初始化

更改数据库引擎

使用 social-auth-app-django 组件必须要将数据库的 引擎改为 innodb 不然会无法使用

DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': "ytshop",
'USER': 'root',
'PASSWORD': "",
'HOST': "127.0.0.1",
'OPTIONS': {'init_command': 'SET storage_engine=INNODB;'}
}
}

迁移数据表

此组件是带有数据表的, 因此需要进行数据库迁移,直接进行 migrate 即可, 源码中自带了 migrations 

./manage.py migrate

迁移成功

增加了5张表

配置认证方式

在 settings.py 中配置第三方认证方式

social_core.backends 中涵盖了全世界的主流的平台, 包括知乎豆瓣等

AUTHENTICATION_BACKENDS = ('social_core.backends.weibo.WeiboOAuth2',   # 微博
'social_core.backends.weixin.WeixinOAuth2', # 微信
'social_core.backends.qq.QQOAuth2', # qq 'django.contrib.auth.backends.ModelBackend', )

配置 接口

urlpatterns = patterns('',
...
url('', include('social_django.urls', namespace='social'))
...
)

配置模板

TEMPLATES = [
{
...
'OPTIONS': {
...
'context_processors': [
...
'social_django.context_processors.backends',
'social_django.context_processors.login_redirect',
...
]
}
}
]

配置第三方平台相关参数

SOCIAL_AUTH_TWITTER_KEY = 'foobar'
SOCIAL_AUTH_TWITTER_SECRET = 'bazqux'

配置参数需要进行更改, TWITTER 改成对应平台的大写

以微博为例 需要输入 key 以及 Secret

SOCIAL_AUTH_WEIBO_KEY = '34XXXXX2804'
SOCIAL_AUTH_WEIBO_SECRET = '836c9d55a88XXXX77c8c31bd1'

配置登录成功回调路径

# 第三方登录后自动跳转
SOCIAL_AUTH_LOGIN_REDIRECT_URL = '/index/'

rest-framework 时特殊配置

django 和  rest-framework  的登录流程有所不同,

social-auth-app-django 对 django 的兼容性更好一些,但是对DRF 有所不同

需要进行一定程度的处理, 存放进去用户以及相关的 token

修改位置

需要做手脚的是下图中的部分

最后返回的时候将此代码进行更改为下面的代码

 # return backend.strategy.redirect(url)

修改代码

from rest_framework_jwt.serializers import jwt_payload_handler, jwt_encode_handler
    payload = jwt_payload_handler(user)
reponse = backend.strategy.redirect(url)
reponse.set_cookie("name", user.name if user.name else user.username, max_age=24 * 3600)
reponse.set_cookie("token", jwt_encode_handler(payload), max_age=24 * 3600)
return reponse

Python - social-auth-app-django 模块 - 商城项目 第三方方式登录 - 微博的更多相关文章

  1. python框架Django实战商城项目之工程搭建

    项目说明 该电商项目类似于京东商城,主要模块有验证.用户.第三方登录.首页广告.商品.购物车.订单.支付以及后台管理系统. 项目开发模式采用前后端不分离的模式,为了提高搜索引擎排名,页面整体刷新采用j ...

  2. Python学习手册之__main__ 模块,常用第三方模块和打包发布

    在上一篇文章中,我们介绍了 Python 的 元组拆包.三元运算符和对 Python 的 else 语句进行了深入讲解,现在我们介绍 Python 的 __main__ 模块.常用第三方模块和打包发布 ...

  3. python的常用内建模块与常用第三方模块

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理 一.常用内置模块1.datetimePython 提供了一个 time 和 calendar 模块可 ...

  4. python框架Django实战商城项目之用户模块创建

    创建用户APP 整个项目会存在多个应用,需要存放在一个单独的文件包了,所以新建一个apps目录,管理所有子应用. 在apps包目录下穿件users应用 python ../../manage.py s ...

  5. django实战商城项目注册业务实现

    设计到的前端知识 项目的前端页面使用vue来实现局部刷新,通过数据的双向绑定实现与用户的交互,下面来看一下需求,在用户输入内容后,前端需要做一些简单的规则校验,我们希望在在用户输入后能够实时检测,如果 ...

  6. day78_淘淘商城项目_11_单点登录系统实现 + 用户名回显 + ajax请求跨域问题详解_匠心笔记

    课程计划 1.SSO注册功能实现 2.SSO登录功能实现 3.通过token获得用户信息 4.ajax跨域请求解决方案--jsonp 1.服务接口实现   SSO系统就是解决分布式环境下登录问题的,本 ...

  7. 【updating】python读书笔记-The Django Book2.0(for django1.4)

    原文:http://www.djangobook.com/en/2.0/frontmatter.html 译文:http://djangobook.py3k.cn/2.0/ 或者http://docs ...

  8. django模块安装环境变量

    django 模块 一 安装: 方法一: (在 JetBrains PyCharm 2017.2 软件的) 设置 (里找到) 项目:python +(添加) (搜索) django Install p ...

  9. Python第十三天 django 1.6 导入模板 定义数据模型 访问数据库 GET和POST方法 SimpleCMDB项目 urllib模块 urllib2模块 httplib模块 django和web服务器整合 wsgi模块 gunicorn模块

    Python第十三天   django 1.6   导入模板   定义数据模型   访问数据库   GET和POST方法    SimpleCMDB项目   urllib模块   urllib2模块 ...

随机推荐

  1. 深度学习之卷积神经网络CNN及tensorflow代码实例

    深度学习之卷积神经网络CNN及tensorflow代码实例 什么是卷积? 卷积的定义 从数学上讲,卷积就是一种运算,是我们学习高等数学之后,新接触的一种运算,因为涉及到积分.级数,所以看起来觉得很复杂 ...

  2. less嵌套规则

    嵌套,是less里面最有意思的小东西,比如说我们经常性的去写一些列表性的东西 html <ul class="list"> <li><a href=& ...

  3. 解压gz文件有误

    tar: This does not look like a tar archive tar: Skipping to next header tar: Exiting with failure st ...

  4. SQL SERVER 2008 数据库隔离级别代码演示

    SQL SERVER 2008 数据库隔离级别代码演示   个隔离级别(其实这是SQL 工业标) 种隔离级别,本身没有优劣之分,完全取决于应用的场景. 本质上,他们是在 隔离性(紊乱程度) 和 灵活性 ...

  5. iView的tree组件实现单选功能

    iView中的树组件有复选框可以多选,但是目前还没有提供单选框的模式,不显示复选框可以提供高亮单选的模式,但是再次点击就被取消了,没有实现真正的单选: tree 的属性配置中 multiple 是否支 ...

  6. Tensorflow2.0学习(一)

    站长资讯平台:今天学习一下Tensorflow2.0 的基础 核心库,@tf.function ,可以方便的将动态图的语言,变成静态图,在某种程度上进行计算加速 TensorFlow Lite Ten ...

  7. DOS窗口启动tomact,运用startup.bat/shutdown.bat命令启动/关闭tomcat

    设置CATALINA_HOME环境变量1.CATALINA_HOME是TOMCAT安装路径的别名,目的是为了方便使用TOMCAT2.计算机>属性>环境变量, 新建环境变量.变量名为CATA ...

  8. CF788C The Great Mixing BFS+思维

    这个模型十分巧妙啊,好题好题~ code: #include <bits/stdc++.h> #define N 3006 #define setIO(s) freopen(s" ...

  9. openstack 无法创建新虚拟机报错 openstack报错:Host is not mapped to any cell

    关联错误提示:Host is not mapped to any cell 控制节点上执行: root@ubsv:/home/makeit# nova-manage cell_v2 discover_ ...

  10. Eclipse的快捷键设置及使用

    Eclipse快捷键的设置和使用 java程序开发,经常会用Eclipse或者MyEclise集成开发环境,一些实用的Eclipse快捷键和使用技巧, 可以在平常开发中节约出很多时间提高工作效率,下面 ...