开发准备

开通微博开发者权限

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

开通后权限后创建应用

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

开发环境信息

此处一些信息是很重要的东西, 比如 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. Java程序猿跳槽应该学哪些方面的技术

    互联网产品.大型企业级项目常会用到的: 并发处理技术 具体到Java上通常是涉及java.util.concurrent.并发锁机制.NIO等方面,当然最近比较火爆的Netty框架也可以作为高并发处理 ...

  2. Image Processing and Analysis_15_Image Registration:Image registration methods a survey——2003

    此主要讨论图像处理与分析.虽然计算机视觉部分的有些内容比如特 征提取等也可以归结到图像分析中来,但鉴于它们与计算机视觉的紧密联系,以 及它们的出处,没有把它们纳入到图像处理与分析中来.同样,这里面也有 ...

  3. bash基础——终端

    前言 自学Linux的时候,我们用的显示器+键盘 是物理终端.Linux开机后,会在物理终端(显示器)之上,以软件的方式虚拟出多个终端,CentOS是6个.Ctrl+Alt+F1~6切换 默认情况下, ...

  4. FreeRTOS调度器

    FreeRTOS----调度器 调度器的启动流程分析 当创建完任务之后,会调用vTaskStartScheduler()函数,启动任务调度器: void vTaskStartScheduler( vo ...

  5. CentOs Linux 对于Django uwsgi + Nginx 的安装与部署

    Django Nginx+uWSGI 安装配置 链接:

  6. IIS搭建ASP站点

    1. 进入控制面板悬着打开或者关闭Windows功能. 2. 手工选择需要的功能进行安装. 3. 打开运行Internet信息服务(IIS)管理工具. 4. 展开左侧栏看到“Default Web S ...

  7. nginx添加模块记录

    查看现有nginx的编译参数: [root@iZbp1d0dkjhfmxnxp7wuhmZ nginx-1.12.2]# nginx -Vnginx version: nginx/1.12.2buil ...

  8. throttle(节流函数) 与 debounce(防抖动函数)理解与实现

    我们会对一些触发频率较高的事件进行监听,(如:resize scroll keyup事件) 如果在回调里执行高性能消耗的操作(如反复操作dom, 发起ajax请求等),反复触发时会使得性能消耗提高,浏 ...

  9. Java并发包--ArrayBlockingQueue

    转载请注明出处:http://www.cnblogs.com/skywang12345/p/3498652.html ArrayBlockingQueue介绍 ArrayBlockingQueue是数 ...

  10. jmeter接口测试-使用rsa加密解密算法

    本篇介绍jmeter 使用rsa算法进行加密参数 如果测试过程中,部分接口采用了rsa加密算法,我们的jmeter 也是可以直接拿来调用的,不需要开发配合去掉加密代码! 直接上代码 import or ...