Django_Restful Framework之QQ登录流程分析(一)

  

  本篇主要介绍如何使用Django的Restful Framework提供第三方登录的API,主要介绍其流程及基本的代码实现。

  在学习之前我们需要知道什么是第三方登录 -- 是指用户可以不在本项目中输入密码,而直接通过第三方的验证,成功登录本项目。

  实现第三方登录时,我们需要明确QQ提供的开发者文档,即 :

  1. 成为QQ的开发者,注册
  2. 创建应用,即获取本项目对应与QQ互联的应用ID,创建应用
  3. QQ登录开发文档,文档

 一、QQ登录流程

 有了上述的准备工作,我们需要明确进行第三方登录的流程,这里以QQ登录为例:

 从上面的时序图我们可以总结以下几步:

  1. 当用户点击QQ登录按钮时,会向后端请求进行QQ登录的界面,即进行QQ登录的URL。
  2. 后端实现API,返回根据QQ文档提供的URI和参数,拼接URL返回给前端。 -- API①
  3. 前端在拿到URL会跳转到QQ登录界面,用户进行登录,登录成功,QQ服务器会根据我们提供的callback地址,跳转到我们项目的回调URL中。
  4. 提供接口,决定用户是直接登录成功跳转到上一次访问的页面,还跳转到与本项目的账号进行绑定的页面。(取决于用户是否第一次进行QQ登录)。而在这个过程中我们会--》根据回调URL中参数code,向QQ服务器请求授权证书access_token,再根据access_token获取用户的openid及用户头像等。再由openid去数据库查询是否存在,决定跳转页面。 -- API②
  5. 若用户第一次使用QQ登录,为与本项目账号进行绑定,跳转到绑定页面,让用户进行绑定操作。在进行绑定同时,分为两种情况。 -- API③
  6. 用户在本项目中的账号已存在,只需进行校验,将openid与用户进行绑定即可。
  7. 若用户在本项目中账号不存在,需先为用户创建在本项目的账号,在进行绑定。
  8. 绑定完成,向前端返回用户信息,前端执行页面的调转。

那么流程我们已经分析完成,接下就是数据库的模型类的创建、API的一一的实现。

二、模型类的实现

  首先我们明确一下为什么要创建新的模型类,而不是在原有的User的模型类中添加字段,这是由于若后面的第三方登录越来越多,那么我们每次都为User模型类中添加字段,而这些字段通常与用户需要展示的信息关系不大,同时会让数据表显得臃肿。

  大致看一下结构如何吧:

  在该模型类中我们只创建两个字段:

  1. 用户 -- 用户模型类对象
  2. openid -- 用户在QQ服务器的openid。

  而在BaseModel只有两个字段,这是有序create_time和update_time可能经常使用,故单独抽取出来进行处理。

from django.db import models

class BaseModel(models.Model):
    """为模型类补充字段"""
    create_time = models.DateTimeField(auto_now_add=True, verbose_name="创建时间")
    update_time = models.DateTimeField(auto_now=True, verbose_name="更新时间")

    class Meta:
        abstract = True  # 说明是抽象模型类, 用于继承使用,数据库迁移时不会创建BaseModel的表

  本篇主要进行了第三方登录的流程分析,和数据库模型类的创建。下篇会对每个API进行一一 的实现。

原文地址:https://www.cnblogs.com/littlefivebolg/p/9771722.html

时间: 2024-08-28 10:10:05

Django_Restful Framework之QQ登录流程分析(一)的相关文章

Django_Restful Framework之QQ登录API实现(二)

上篇已经介绍了QQ第三方登录的流程分析和模型类的创建,并且也知道了再整个过程中我们需要提供哪些API为前端提供数据. 一.提供用户登录URL的API实现 在上篇我们已经分析了当用户点击QQ登录按钮时,后端需要为前端提供进行QQ登录的URL,可能许多人会疑惑为什么不直接由前端处理URL,直接是由该URL进行进行如QQ登入界面? 这是由于我们需要根据QQ开发者文档提供相应的地址,和查询字符串等. 而由于第三方登录在其他的项目中,可能也会使用到第三方登录(QQ登录),所以我们需要考虑解耦的性能,这里我

本页面用来演示如何通过JS SDK,创建完整的QQ登录流程,并调用openapi接口

QQ登录将用户信息存储在cookie中,命名为__qc__k ,请不要占用 __qc__k : 1) :: 在页面顶部引入JS SDK库: 将"js?"后面的appid参数(示例代码中的:100229030)替换成您自己的appid: 示例代码:<script type="text/javascript" src="http://qzonestyle.gtimg.cn/qzone/openapi/qc_loader.js" data-app

第三方登录(QQ登录)开发流程详解

原文  http://www.cnblogs.com/it-cen/p/4338202.html 主题 OpenID 近排由于工作的繁忙,已经一个星期没写博文做分享了,接下来我对网站接入第三方登录----QQ登录的实现逻辑做一个详细的讲解. 对于整个流程的详细文档可以到QQ互联官网( http://wiki.connect.qq.com )查看,我这里就简单地进行描述,主要是分析代码的实现过程. 我用的是CI框架(MVC模式),模板引擎用的是smarty. 下图为整个接入流程: 一.准备工作 接

(转)第三方登录(QQ登录)开发流程详解

近排由于工作的繁忙,已经一个星期没写博文做分享了,接下来我对网站接入第三方登录----QQ登录的实现逻辑做一个详细的讲解. 对于整个流程的详细文档可以到QQ互联官网(http://wiki.connect.qq.com)查看,我这里就简单地进行描述,主要是分析代码的实现过程. 我用的是CI框架(MVC模式),模板引擎用的是smarty. 下图为整个接入流程: 一.准备工作 接入QQ登录前,网站需首先进行申请,获得对应的appid与appkey,以保证后续流程中可正确对网站与用户进行验证与授权.

基于Swift语言开发微信、QQ和微博的SSO授权登录代码分析

前言 Swift 语言,怎么说呢,有一种先接受后排斥,又欢迎的感觉,纵观国外大牛开源框架或项目演示,Swift几乎占据了多半,而国内虽然出现很多相关技术介绍和教程,但是在真正项目开发中使用的占据很少部分,原因一是目前熟练它的开发者并不多,二是版本不太稳定,还需要更成熟可靠的版本支持,但总之未来还是很有前景的,深有体会,不管是代码量还是编译效率,以及语言特性,现代性都优于Object-C,估计后续会被苹果作为官方开发语言,值得期待. 走起 鉴于此,笔者将之前用Object-C写的SSO授权登录:微

安卓应用使用QQ登录的申请流程

“QQ互联”是腾讯为第三方网站.媒体.终端提供的开放平台.QQ互联拥有8个组件,提供诸如分享.登陆.like.qq提醒等能力.开发者使用QQ帐号登陆组件可以降低了用户的注册门槛,减少注册环节的用户流失.那么如何申请和使用QQ登陆能力呢?下面为您解答.  ps:关于qq互联的详细内容可以在官网获得http://connect.qq.com 1.  为什么要在手机应用中加入QQ登录功能? QQ互联是腾讯开放平台为第三方网站和应用提供的开放接入方式,主要包含QQ登录.分享组件.赞组件和关注组件.其中Q

第三方登录之QQ登录(二)——OAuth2.0处理流程介绍(以QQ登录为例)

为了让网站更快接入,腾讯提供了JS SDK的接入方案,具体点击这里或者点击这里进行查看. 不过也可以自己写代码,当然你需要了解QQ的OAuth2.0的处理流程(Web Server Flow). OAuth2.0的处理流程:点击这里查看官方Wiki. 1.授权:获取授权码Authorization Code 说明:第一步QQ必须得到要登录系统的授权信息,如果授权全成功,则会跳转到回调地址,同时授权码以参数形式,追加回调地址上. 当然还有一些其他参数,具体详情看官方介绍. 实例: https://

iOS 第三方登录之 QQ登录

一. 首先需要下载腾讯qq登录所需的库,下载地址是http://open.qq.com/ . 需要用到的有TencentOpenAPI.framework 和TencentOpenApi_IOS_Bundle.bundle,将两者加入工程. 二.下面就来实现QQ第三方登录 1.声明属性,且viewcontroller实现TencentSessionDelegate @interface LoginViewController :UIViewController<TencentSessionDel

iOS QQ登录 傻瓜式集成

一,iOS SDK 下载 请到SDK下载页面下载最新版本QQ登录iOS SDK. 二,iOS SDK目录结构 iOS SDK包中带有两个文件: 1. TencentOpenAPI.framework打包了iOS SDK的头文件定义和具体实现. 2. TencentOpenApi_iOS_Bundle.bundle 打包了iOS SDK需要的资源文件. 三,将iOS SDK文件添加到工程中 1. 将iOS SDK中的TencentOpenAPI.framework和TencentOpenApi_I