Django网络应用开发的5项基础核心技术包括模型(Model)的设计,URL 的设计与配置,View(视图)的编写,Template(模板)的设计和Form(表单)的使用。
在知道小程序授权登录流程之后,按照每个步骤编写授权的业务代码。完成了小程序端的授权登录,需要将 code 通过 POST 请求传给服务端,再用appid,secret,js_code分别替换如上接口地址的APPID、SECRET、JSCODE,其它不变,组装成完整的地址。
https://api.weixin.qq.com/sns/jscode2session?appid=appid&secret=secret&js_code=code&grant_type=authorization_code
在去请求接小程序登录的接口地址前,需要先了解一个知识点。后端通过JSON web token方式登录,把token和用户id传回小程序。那问题就来了,用什么来存储 token,Django 的项目一般都是视图+模板一套出来,像这种不通过模板的值,该如何传递呢?
一、Session保存会话数据
Session和Cookie的关系是什么?
Session是基于Cookie, 是因为把数据写入session时将会生成一个随机字符串,并将随机字符串存入cookie,再读取时,是先从cookie中获取这个随机字符串,在去获取session内容。在SessionMiddleware中的process_request方法里面可以看到。
二、服务端登录验证
流程
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换取成openid
Session就是保存了会话里面的数据,通过request.session进行获取。
导入 json、requests 模块,将APPID、SECRET、JSCODE,组装成完整的地址。通过requests 的 GET 请求换取用户openid。
import json
import requests
def code2session(appid, code):
API = "https://api.weixin.qq.com/sns/jscode2session"
params = "appid=%s&secret=%s&js_code=%s&grant_type=authorization_code" % \
(appid, settings.WX_APP_SECRET, code)
url = API + "?" + params
response = requests.get(url=url)
data = json.loads(response.text)
return data