微信登入小程序与后端实现

**需求:**实现小程序端实现登入以后,后端实现登入状态

小程序端

app.js

App({onLaunch: function () {// 展示本地存储能力001bHJ281qo7rS1JR1481OQC281bHJ2Bvar _this = this;  wx.login({success: res => {// console.log(res);wx.request({url: _this.globalData.apiDomain +'/api/member/code/login',data: {code: res.code},method: "POST",header: {'content-type': 'application/json' // 默认值},success: function (res) {console.log(res);wx.setStorageSync('login_key', res.data.data.login_key);},fail:function(res){console.log(res)}})}});},//设置全局的变量,apiDomain这是我们接口的ipglobalData: {apiDomain:'http://127.0.0.1:8000',//保存登入的标识login_key:''}
})

服务端

1添加登入路由user.login.as_view(),接收小程序中传过来的code。

2 我们通过code请求微信接口获取session_key和用户唯一标识openid,当我们拿到openid后,保存至Wxuser表

3 我们随机生成一个login_key,作为键,将session_key和openid拼接,作为值,保存到redis,在将login_key(相当于web中的session)返回小程序,后面小程序需要登入请求的接口,必须带login_key,作为用户标识

url.py

from django.contrib import admin
from django.urls import path
from django.conf.urls import url
from api.views import product,userurlpatterns = [path('admin/', admin.site.urls),url(r'^api/indexlist/categoryList$', product.caetgoryList.as_view()),url(r'^api/indexlist/IndexProductList$', product.ProductList.as_view()),url(r'^api/indexlist/categoryProductsList$', product.categoryProductsList.as_view()),url(r'^api/indexlist/detailProduct$', product.detailProduct.as_view()),url(r'^api/member/code/login$', user.login.as_view()),
]

user.py

from django.shortcuts import render,HttpResponse
from rest_framework.views import APIView
from api.wx import wxlogin,UserInfo,setting
from api import baseResponse
import time
from django.core.cache import cache #引入缓存模块
from api import models
from django.http import JsonResponse
import hashlib
# Create your views here.
class login(APIView):def post(self,request):# 用apiview之后,再取数据,从request.dataparams=request.data#判断前端是否传入code参数if params.get('code'):code=params['code']#调用wxloing.getLoginInfo获取session_key和openiduser_data=wxlogin.getLoginInfo(code)if user_data:#将session_key和openid拼接成字符串,不要乱选拼接字符串,因为openid中有特殊符号val=user_data['session_key']+'&'+user_data['openid']#生成MD5值获取keymd=hashlib.md5()md.update(code.encode('utf-8'))md.update(str(time.clock()).encode('utf-8'))key = md.hexdigest()data={}try:#将key和上面的val存入rediscache.set(key,val)#返回login_key到小程序data['login_key'] = key#将用户数据存入数据库try:user = models.Wxuser.objects.get(openid=user_data['openid'])except Exception as e:user=None#如果数据没有则创建记录if not user:models.Wxuser.objects.create(openid=user_data['openid'])re_data = baseResponse.resdic("success", "成功",data )return JsonResponse(re_data)except Exception as e:print(e)re_data = baseResponse.resdic("error", "redis程序出错" )return JsonResponse(re_data)else:re_data = baseResponse.resdic("error", "获取session_key失败")return JsonResponse(re_data)else:re_data = baseResponse.resdic("error", "缺少参数")return JsonResponse(re_data)

api.wx.setting.py

AppId="wxd1eba74200bc40c8"
AppSecret="0d7168052febae147f1d70eb6b8996d5"
code2session_url= "https://api.weixin.qq.com/sns/jscode2session?appid={}&secret={}&js_code={}&grant_type=authorization_code"
acces_url=  'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={}&secret={}'

api.wx.wxlogin

from api.wx import setting
import requests
import jsondef getLoginInfo(code):url=setting.code2session_url.format(setting.AppId,setting.AppSecret,code)re_data= requests.get(url)json_response = re_data.content.decode()  # 获取r的文本 就是一个json字符串# 将json字符串转换成dic字典对象data = json.loads(json_response)if data.get('session_key'):return datareturn  False

4.微信登入小程序与后端实现相关推荐

  1. 微信小程序之微信登入

    以下代码基于uni-app编写 如果没有appid,那么uni-login是受限制的 https://open.weixin.qq.com/ 认证商户() 微信登入 不同的应用对于微信登入会做不同的处 ...

  2. 微信小程序前后端交互案例

    微信小程序前后端交互案例 首先声明一下,本人也是一个初学者(下面的案例可能会有很多不完整或说的不正确的,所以只能起到参考作用,千万不要拿我的话当标准). 我是纯自学,之前在前后端交互方面一直搞不懂,所 ...

  3. 微信小程序与后端Java接口交互-图书搜索实现

    完整微信小程序(Java后端) 技术贴目录清单页面(必看) 我们模拟实现一个微信小程序端关键字图书,然后显示图书列表的功能,如下图: 实现大体思路,前端用户输入关键字,通过bindtap事件,事件里得 ...

  4. 微信运动步数:小程序+Java后端,源码可下载

    微信运动步数:小程序+Java后端 更多资源:www.jeeweixin.com 功能说明: 1.获取和展示用户的微信运动步数,计算卡路里: 2.用户打开小程序即可实现步数打卡入库: 3.通过日历展示 ...

  5. 微信小程序与后端交互(ssm)

    2020-5-18更新 最近因为要用微信小程序和java后端(ssm框架)做一个云笔记的软件,因为刚刚接触小程序,在网上查了许多资料.首先,看视频学了点小程序中wxml.js.wxss.json这些类 ...

  6. (已更新)运势运程小程序v1.2.0 功能模块+微信小程序+前端+后端+新增每日星座卡片

    运势运程算命小程序 v1.2.0 完整版+微信小程序+前端+后端 运势运程算命小程序开源源码最新更新日志: 新增测算栏目支付成功模版消息提醒,增加留存率.新增每日星座卡片.单向历,请求缓存解决请求慢问 ...

  7. 小程序服务器端端接口,微信小程序:后端服务接口(WordPress)

    微信的小程序相当于是一套前端(Frontend)应用的框架,让它变成一个真正能用的 App,我们还得给它提供一个后端服务,或者叫应用后台(Backend).几乎所有的后端应用框架都支持为小程序提供后端 ...

  8. 运势运程算命小程序v1.2.0 功能模块+微信小程序+前端+后端+新增每日星座卡片

    运势运程算命小程序开源源码最新更新日志: 新增测算栏目支付成功模版消息提醒,增加留存率.新增每日星座卡片.单向历,请求缓存解决请求慢问题.修复测算出生日期开始时间,从 1979 更改为 1918 运势 ...

  9. 微信小程序前后端数据交互

    目录 一 微信小程序发送请求 二 后端接口接受小程序请求并返回数据 三 最后的效果图 先简单说一下我写的这个危险小程序前后端交互的业务,主要是两个数据:supplyCount和wantBuyCount ...

最新文章

  1. 原来评分卡模型的概率是这么校准的!
  2. Qt实现3D纹理渲染自由旋转空间立方体
  3. 微服务架构下,静态数据通用缓存机制!
  4. [C#]Attribute特性(2)——方法的特性及特性参数
  5. 数据结构 - 赫夫曼树
  6. linux系统怎么样同步时间,Linux系统时间同步
  7. spring 中bean初始化
  8. python计算数组元素个数_python简单获取数组元素个数的方法
  9. QLoo graphql engine 学习二 基本试用(kubernetes)
  10. 【Spring】Spring常用配置-Bean的初始化和销毁(生命周期)
  11. maven(二) maven项目构建ssh工程(父工程与子模块的拆分与聚合)
  12. 计算机图形学在线作业,18春北交《计算机图形学》在线作业一-2
  13. 功能设计与交互设计的冲突和融合_邓昆
  14. python中间件有哪些_python_21(Django中间件)
  15. 计算机课程设计红绿灯,labview红绿灯课程设计报告
  16. Python下载安装教程Python3.7版本
  17. 完成基因序列(fasta格式)的提取,核苷酸计数,GC含量计算,DNA 翻译为 RNA,RNA 翻译为 蛋白质,反向序列获取的相关函数
  18. 小程序 Rsa加密
  19. android gpuimage 直播,1小时学会:最简单的iOS直播推流(四)如何使用GPUImage,如何美颜...
  20. ElectronBot支线项目

热门文章

  1. 第一次用计算机证明的数学定理是,勾股定理是一个基本几何定理,是人类早期发现并证明的重要数学定理之一,用代数思想解决几何...
  2. python turtle绘图中角度坐标系的绝对零度方向是_python turtle绘图中角度坐标系的绝对零度方向是_程序员也有春天,母亲节用python画朵玫瑰送给妈妈......
  3. POJ1830 开关问题
  4. 计算机图形学(光栅显示系统、基于GLUT的OpenGL程序框架、基本图元光栅化)
  5. 微信WiFi认证的解决方案
  6. 好心情:长期服用精神药物,需监测哪些指标?
  7. 让你的APP轻松加上扫描二维码功能
  8. BI Publisher rtf模板页眉页脚
  9. Android 9.0 Wifi连接AP过程
  10. Matlab字体美化