专栏首页数据云团Django实战-小程序服务端登录验证-上

Django实战-小程序服务端登录验证-上

Django实战-初识小程序授权登录

Django网络应用开发的5项基础核心技术包括模型(Model)的设计,URL 的设计与配置,View(视图)的编写,Template(模板)的设计和Form(表单)的使用。

在授权登录验证前,需要对本项目的模型(Model)进行设计。设计模型时,需要考虑用户和应用之间有怎样的联系,用户可以添加多个应用和删除某个应用,在这样需求下,可以将用户和应用设置成多对多的关系,即一个用户可以关联多个应用。

一、模型(Model)设计

本项目的User 模型,没有继承Django自带的AbstractBaseUser类。而是 models.Model 自定义用户模型。models.ManyToManyField 是用户和应用多对多的外键。

class User(models.Model):    open_id = models.CharField(max_length=32, unique=True, help_text="用户ID", verbose_name="用户ID")    nickname = models.CharField(max_length=256, help_text="用户昵称", verbose_name="用户昵称")    # 菜单 app    menu = models.ManyToManyField(App, help_text="关联应用", verbose_name="关联应用")
    class Meta:        # 添加索引,数组        indexes = [            # 组合索引            models.Index(fields=['open_id', "nickname"]),        ]
    def __str__(self):        return "用户昵称:%s" % self.nickname

本项目的应用APP 模型

class App(models.Model):    # 唯一 id    appid = models.CharField(primary_key=True, max_length=32, verbose_name="appid", help_text="appid")    # 分类    category = models.CharField(max_length=128, verbose_name="分类", help_text="分类")    # 功能名字    application = models.CharField(max_length=128, verbose_name="功能名字", help_text="功能名字")    # 中文名字    name = models.CharField(max_length=128, verbose_name="中文名字", help_text="中文名字")    # 发布时间    publish_date = models.DateField(verbose_name="发布时间", help_text="发布时间")    # 请求链接    url = models.CharField(max_length=128, verbose_name="请求链接", help_text="请求链接")    # 描述    desc = models.TextField(verbose_name="描述", help_text="描述")        # 字段序列化    def to_dict(self):        return {            "appid": self.appid,            "category": self.category,            "application": self.application,            "name": self.name,            "publish_date": self.publish_date,            "url": self.url,            "desc": self.desc        }
    def __str__(self):        return str(self.to_dict())
    def __repr__(self):        return str(self.to_dict())

二、服务端登录验证

流程

1.使用微信小程序登录和获取用户信息Api接口

2.把Api获取的用户资料和code发送给django后端

3.通过微信接口把code换取成openid

4.后端将openid作为用户名和密码

5.后端通过JSON web token方式登录,把token和用户id传回小程序

6.小程序将token和用户id保存在storage中

下次请求需要验证用户身份的页面时,在header中加入token这个字段

① 小程序获取用户信息

Django实战-初识小程序授权登录

② 用户资料和code发送给django后端

③ 微信接口把code换取成openid

使用 wx.login 的临时 code 到微信提供的 code2session 接口授权。

使用Django设置Session,Session就是保存了会话里面的数据,通过request.session进行获取。

https://api.weixin.qq.com/sns/jscode2session?appid=appid&secret=secret&js_code=code&grant_type=authorization_code

获取步骤: (1)获得appid,secret,js_code (2)用appid,secret,js_code分别替换如上接口地址的APPID、SECRET、JSCODE,其它不变,组装成完整的地址。

本文分享自微信公众号 - 数据云团(SmartData),作者:云团小楠

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-08-27

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Django实战-信息资讯-订单基础模型

    Django网络应用开发的5项基础核心技术包括模型(Model)的设计,URL 的设计与配置,View(视图)的编写,Template(模板)的设计和Form(...

    小团子
  • Django实战-信息资讯-资讯模型

    Django网络应用开发的5项基础核心技术包括模型(Model)的设计,URL 的设计与配置,View(视图)的编写,Template(模板)的设计和Form(...

    小团子
  • Django实战-调查问卷表设计优化

    Django网络应用开发的5项基础核心技术包括模型(Model)的设计,URL 的设计与配置,View(视图)的编写,Template(模板)的设计和Form(...

    小团子
  • 基于 Django 的手机管理系统

    希希里之海
  • Swift3.0 - 初始化和释放

    1.系统要求存储属性必须初始化 2.可选值可以不用初始化,如果不初始化值,系统默认用nil初始化它 3.如果非可选类型存储属性不设置默认值,则必须在初始化方...

    酷走天涯
  • 只含有1、2、3的数组排序

    不要举 00 11 22 、 22 11 00 、 11 00 22 这类特点明显不够随机的用例。

    陈黎栋
  • Django数据库查询优化与AJAX

    每一列属性都是不可再分的,两列的属性相近或相似或一样,应尽量合并属性一样的列,确保不产生冗余数据。

    GH
  • 使用Kubernetes和容器扩展Spinnaker

    Kubernetes和容器完全改变了我们对完成工作所使用的工具的看法。扩展自动化平台需要通过fork开发定制扩展,并决定是否应该贡献上游的日子已经一去不复返了。...

    CNCF
  • FreeGlut配置简介

    版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wpxu08/article/details/8778...

    步行者08
  • PlayScala 2.5.x - 关于Content-Type的注意事项

    joymufeng

扫码关注云+社区

领取腾讯云代金券

玩转腾讯云 有奖征文活动