python代码实现小程序登录流程时序总结

 更新时间:2022年04月12日 18:02:53   作者:Jeff的技术栈  
这篇文章主要为大家介绍了python代码实现小程序的登录案例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步早日升职加薪

官方文档

https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/login.html

小程序登录

小程序可以通过微信官方提供的登录能力方便地获取微信提供的用户身份标识,快速建立小程序内的用户体系。

登录流程时序

说明:

  • 调用wx.login()获取临时登录凭证code,并回传到开发者服务器。
  • 调用auth.code2Session接口,换取用户唯一标识 OpenID和会话密钥 session_key。

之后开发者服务器可以根据用户标识来生成自定义登录态,用于后续业务逻辑中前后端交互时识别用户身份。

注意:

  • 会话密钥session_key是对用户数据进行加密签名的密钥。为了应用自身的数据安全,开发者服务器不应该把会话密钥下发到小程序,也不应该对外提供这个密钥。
  • 临时登录凭证 code 只能使用一次

小程序的登录总结

1 小程序端执行wx.login()获取code

2 将1中的code发送到后端,后端调用auth.code2Session这个接口,得到openid和session_key

3 自定义登入状态,我们生成一个key与openid和session_key相绑定。把key返回到小程序中

4 小程序端保存,然后下次请求需要登入的接口的时候,把key带上。

案例

# app.js的onLaunch中   因为登录是用户感觉不到的
App({
  onLaunch: function () {
    let that = this
    // 登录
    wx.login({
      success: res => {
        // 发送 res.code 到后台换取 openId, sessionKey, unionId
        console.log(res.code)   //拿到code
        wx.request({
          url:that.globalData.baseurl+"/login/",
          data:{'code':res.code},
          method:'POST',
          success(e){
            console.log(e.data)
            // wx.setStorageSync("token", e.data.data.token)
            
          }
        })
      }
    }),
    globalData: {
    userInfo: null,
    baseurl:"http://127.0.0.1:8000"
  }
# dango后台中
# urls.py 路由中
path('login/', user.Login.as_view()),
# user.py中
from rest_framework.views import APIView
from rest_framework.response import Response
from api.wx import wx_login
import hashlib, time
from django.core.cache import cache
from api.models import Wxuser
class Login(APIView):
    def post(self, request):
        param = request.data
        print(request.data)
        if not param.get('code'):
            return Response({"status": 1, "msg": '缺少参数'})
        else:
            code = param.get("code")
            user_data = wx_login.get_login_info(code)
            if user_data:
                val = user_data['session_key'] + "&" + user_data['openid']
                md5 = hashlib.md5()
                md5.update(str(time.clock()).encode("utf-8"))
                key = md5.hexdigest()
                cache.set(key, val)  # 放进内存redis库中,把key传给前端当token.下次前台带着key就能拿到val
                has_user = Wxuser.objects.filter(openid=user_data['openid']).first()  # 判断openid是否存在
                if not has_user:
                    Wxuser.objects.create(openid=user_data['openid'])
                return Response({
                    "status": 0,
                    "msg": "ok",
                    "data": {"token": key}
                })
            else:
                return Response({"status": 2, "data": "无效的code"})
# models.py中:
from django.db import models
class Wxuser(models.Model):
    id = models.AutoField(primary_key=True)
    openid=models.CharField(max_length=255)
    name = models.CharField(max_length=50)
    avatar = models.CharField(max_length=200)
    language = models.CharField(max_length=50)
    province = models.CharField(max_length=50)
    city = models.CharField(max_length=50)
    country = models.CharField(max_length=50)
    #gender = models.CharField(max_length=50)
    creat_time = models.DateTimeField(auto_now_add=True)
    update_time = models.DateTimeField(auto_now=True)
    def __str__(self):
        return self.openid
# settings.py中:自己注册的微信小程序信息
AppId=""
AppSecret=""
code2Session="https://api.weixin.qq.com/sns/jscode2session?appid={}&secret={}&js_code={}&grant_type=authorization_code"
# wx_login.py中:
from api.wx import settings
import requests
def get_login_info(code):
    # 拼接路径
    code_url = settings.code2Session.format(settings.AppId,settings.AppSecret,code)
    response = requests.get(code_url)  # 返回的是json数据
    json_response = response.json()    # 把json数据转换为字典
    if json_response.get('session_key'):
        return json_response
    else:
        return False
# cache缓存配置redis数据库

以上就是python代码实现小程序登录流程时序总结的详细内容,更多关于python小程序登录时序总结的资料请关注脚本之家其它相关文章!

相关文章

  • Blueprint实现路由分组及Flask中session的使用详解

    Blueprint实现路由分组及Flask中session的使用详解

    这篇文章主要为大家介绍了Blueprint实现路由分组及Flask中session的使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-11-11
  • python网络编程学习笔记(九):数据库客户端 DB-API

    python网络编程学习笔记(九):数据库客户端 DB-API

    这篇文章主要介绍了python 数据库客户端 DB-API的相关资料,需要的朋友可以参考下
    2014-06-06
  • Python语法垃圾回收机制原理解析

    Python语法垃圾回收机制原理解析

    这篇文章主要介绍了Python语法垃圾回收机制原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03
  • Python Django教程之模板的使用

    Python Django教程之模板的使用

    模板是 Django MVT 结构的第三个也是最重要的部分。Django中的模板基本上是用HTML,CSS和Javascript编写在.html文件中的。本文将通过实例详细聊聊Django模板的使用,感兴趣的可以
    2022-10-10
  • python快速入门题目详解

    python快速入门题目详解

    下面小编就为大家带来一篇快速入门python的题目详解小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2021-11-11
  • Python面向对象之类的定义与继承用法示例

    Python面向对象之类的定义与继承用法示例

    这篇文章主要介绍了Python面向对象之类的定义与继承用法,结合实例形式分析了Python类的定义、实例化、继承等基本操作技巧,需要的朋友可以参考下
    2019-01-01
  • arcgis使用Python脚本进行批量截图功能实现

    arcgis使用Python脚本进行批量截图功能实现

    最近公司数据部那边有个需求,需要结合矢量数据和影像数据,进行批量截图,并且截图中只能有一个图斑,还要添加上相应的水印,这篇文章主要介绍了arcgis使用Python脚本进行批量截图,需要的朋友可以参考下
    2023-01-01
  • Python3中zip()函数知识点小结

    Python3中zip()函数知识点小结

    本文主要介绍了Python3中zip()函数知识点小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-02-02
  • 使用Python来做一个屏幕录制工具的操作代码

    使用Python来做一个屏幕录制工具的操作代码

    本文给大家分享使用Python来做一个屏幕录制工具,通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-01-01
  • 使用pip安装python库的多种方式

    使用pip安装python库的多种方式

    这篇文章主要介绍了使用pip安装python库的几种方式,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-07-07

最新评论