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进行一一 的实现。

猜你喜欢

转载自www.cnblogs.com/littlefivebolg/p/9771722.html