开发准备

开通微博开发者权限

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

开通后权限后创建应用

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

开发环境信息

此处一些信息是很重要的东西, 比如 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. nginx增加新模块

    以gunzip这个模块为例,讲述一下,在nginx中如何安装新的模块 1.首先查看nginx已经安装了哪些模块. nginx –V 2.发现没有gunzip模块,安装 进入nginx的安装目录中,不是 ...

  2. Maven 三种archetype说明--转载

    版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 原文链接:https://blog.csdn.net/cx1110162/article/deta ...

  3. python自动生成Docx(docxtpl库)

    python这个库很有用,可以格式化生成报告等. 其他内容请点此处,下面只写docxtpl的功能代码. # coding: utf-8 import web # 我们用的webpy框架 import ...

  4. idou老师教你学Istio 25:如何用istio实现监控和日志采集

    大家都知道istio可以帮助我们实现灰度发布.流量监控.流量治理等功能.每一个功能都帮助我们在不同场景中实现不同的业务.那Istio是如何帮助我们实现监控和日志采集的呢? 这里我们依然以Bookinf ...

  5. 数据库连接池,DBUtil的模板,dbcp,c3p0

    数据库连接池,DBUtil的模板,Druid使用(重点) 一.DBUtil模板 public class DBUtilTest { public static Connection connectio ...

  6. 解决python中调用 imread 报错:ImportError: cannot import name imread

    安装了scipy后,报cannot import name imread错误, 1.网上查阅资料后说是需要安装pillow,安装pillow之后,仍然报该错误, 2.网上说是pillow与SciPy安 ...

  7. xss之上传文件的xss,绕过csp,预警机制

    xss1.XSS姿势——文件上传XSS https://wooyun.x10sec.org/static/drops/tips-14915.html总结: 1.1.文件名方式,原理:有些文件名可能反应 ...

  8. TreadPool

    ThreadPool概述 提供一个线程池,该线程池可用于执行任务.发送工作项.处理异步 I/O.代表其他线程等待以及处理计时器. 创建线程需要时间.如果有不同的小任务要完成,就可以事先创建许多线程/在 ...

  9. mysql查看当前所有数据库中的表大小和元信息information_schema

    查看所有mysql数据库表和索引大小 mysql查看当前所有的数据库和索引大小 ,),' mb') as data_size, concat(,),'mb') as index_size from i ...

  10. mybatis配置和映射文件

    配置: <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE configurationPUBLIC ...