前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Django实战-小程序服务端登录验证-上

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

作者头像
小团子
发布2019-08-29 13:32:11
9970
发布2019-08-29 13:32:11
举报
文章被收录于专栏:数据云团数据云团

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

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

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

一、模型(Model)设计

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

代码语言:javascript
复制
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 模型

代码语言:javascript
复制
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进行获取。

代码语言:javascript
复制
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,其它不变,组装成完整的地址。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-08-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据云团 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云开发 CloudBase
云开发(Tencent CloudBase,TCB)是腾讯云提供的云原生一体化开发环境和工具平台,为200万+企业和开发者提供高可用、自动弹性扩缩的后端云服务,可用于云端一体化开发多种端应用(小程序、公众号、Web 应用等),避免了应用开发过程中繁琐的服务器搭建及运维,开发者可以专注于业务逻辑的实现,开发门槛更低,效率更高。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档