微信小程序 后端用Flask实现
手上有个微信小程序项目,因为对Python相对熟悉一些,打算后端用python写,具体采用python 轻量级的flask框架。
在做的过程中,有些问题需要考虑,记录在下边.
1. 开发的小程序后端怎么区分不同的小程序用户?
或者说有哪些属性可以唯一的标识一个用户呢?首先想到的是 微信号,手机号,微信号好像现在还没有API可以获取,手机号又比较麻烦还涉及到读取用户信息,进一步的做法是用openid, unionid, 比如让用户每次请求都带上openid, 然后在后台看是否有这个Openid 信息,这是一种方法,这样做相当于把openid 当做web开发里常用的session id 来使用了,区分用户的作用是起到了,但是用一个一成不变的openid 来识别用户是有安全风险的,万一泄露了别人也可以伪装成你来像后台发请求. 既然提到了session id, 那么更好的方案应该是在后台维护 自定义登录态的session[1] 和 openid 的Map表,前后端的用户唯一标识用session id,当识别到是一个的用户的 session 就根据map表找到openid, 再做进一步的操作.
我的小程序在开始阶段就是用 openid放在payload里来识别用户. 有没有更更好的方案呢?应该上token机制,OAuth或者JWT走起,就更加安全了. 我最终选用的方案是 我的flask 学习笔记 里的第7条用到的token方案,简单好用!
2. 小程序怎么同步调用?
看到微信小程序的API 都是异步调用的,比如 app.onLauch 和 page.onLoad, 虽然app.onLauch 先与page.onLoad调用,但是很可能onLoad 执行完成以后onLauch才完成。但是有些时候我们再onLoad里又依赖于onLoad 执行的结果,这时候怎么做到同步调用呢?现在我还不知道,如果有大神有幸看到这里,多谢指点!好像有个callback 功能,还没有去试过
3. page里可以根据变量自动跳转到其他界面吗?
目前没有找到自动跳转的方法, 都是需要用户触发的,用户触发的操作可以是在wxml马上跳转 (如 <nagivator>), 也可以是在js 里调用API跳转(如 wx.redirect)
4. flask 是怎么处理并发的,应用程序需要考虑多进程多线程问题吗?
flask 的app.run()有两个参数threaded和processes可以控制多线程和多进程,默认threaded=False, process=1, 也就是默认不支持多线程和多进程. 下面源码可以看出也不能同时支持多线程和多进程
def make_server(host=None, port=None, app=None, threaded=False, processes=1,
request_handler=None, passthrough_errors=False,
ssl_context=None, fd=None):
"""Create a new server instance that is either threaded, or forks
or just processes one request after another.
"""
if threaded and processes > 1:
raise ValueError("cannot have a multithreaded and "
"multi process server.")
elif threaded:
return ThreadedWSGIServer(host, port, app, request_handler,
passthrough_errors, ssl_context, fd=fd)
elif processes > 1:
return ForkingWSGIServer(host, port, app, processes, request_handler,
passthrough_errors, ssl_context, fd=fd)
else:
return BaseWSGIServer(host, port, app, request_handler,
passthrough_errors, ssl_context, fd=fd)
BaseWSGIServer 这个类是使用IO 多路复用的, 关于IO多路复用,可以参考我另一个篇文章 什么是IO多路复用
Ref:
flask 源码浅析(flask 如何处理请求(多线程,多进程,IO多路复用))
Ref:
[2] 小程序的登录和数据解密全解析
微信小程序 后端用Flask实现的更多相关文章
- 关于开发微信小程序后端linux使用xampp配置https
关于开发微信小程序后端linux使用xampp配置https 背景 由于最近开发微信小程序,前后端交互需要使用https协议,故需要配置https服务 服务器环境 服务器系统 ubuntu 环境 xa ...
- 微信小程序后端开发流程
微信小程序后端开发流程根据官网总结为两个步骤 1.前端调用 wx.login 返回了code,然后调用wx.getUserInfo获取到用户的昵称 头像 2.服务端根据code去微信获取openid, ...
- 微信小程序后端开发(Java语言)笔记
前言: 因为是第一次真正接触后端开发,从编码到部署服务器到上线,所以做个笔记,也供和我一样的开发小白一些参考. 一.前期工作:开发环境与工具: 1. 编程语言:Java #笔者还没学PHP,只想 ...
- 微信小程序开发平台新功能「云开发」快速上手体验
微信小程序开发平台刚刚开放了一个全新的功能:云开发. 简单地说就是将开发人员搭建微信小程序后端的成本再次降低,此文刚好在此产品公测时,来快速上手看看都有哪些方便开发者的功能更新. 微信小程序一直保持一 ...
- 微信小程序踩坑集合
1:官方工具:https://mp.weixin.qq.com/debug/w ... tml?t=1476434678461 2:简易教程:https://mp.weixin.qq.com/debu ...
- 微信小程序学习指南
作者:初雪链接:https://www.zhihu.com/question/50907897/answer/128494332来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明 ...
- 开发一款让我们慢慢变好的微信小程序
1. 前言 朋友,你还记得你想学编程最初的目的是什么吗? 先说说我的吧,我最初想学编程的目的只有一点,感觉编程很酷,会写代码的人很厉害!.随着后面参加工作,我马上产生了让我能够在编程这条路上继续走下去 ...
- 微信小程序专题(一)-----微信后台的相关开发
本人最近在做微信小程序后端的相关开发工作 接触到微信小程序目前来讲需要两个条件 1.前端通过后台服务器去调用微信平台接口,来获取openid: 2.前端必须调用https 跟域名的形式 不得出现ip加 ...
- Flask与微信小程序登录(后端)
开发微信小程序时,接入小程序的授权登录可以快速实现用户注册登录的步骤,是快速建立用户体系的重要一步.这篇文章将介绍 python + flask + 微信小程序实现用户快速注册登录方案(本文主要进行后 ...
随机推荐
- css 蒙层
蒙层 利用z-index: .mui-backdrop-other { position: fixed; top: 44px; right:; bottom:; left:; z-index:; ba ...
- 洛谷P1173 [NOI2016]网格
这个码量绝对是业界大毒瘤...... 300行,6.5k,烦的要死...... 题意:给你一个网格图,里面有0或1.你需要把一些0换成1使得存在某两个0不四联通.输出最小的换的数量.无解-1. n,m ...
- (转)source insight的使用方法逆天整理
转载自:https://www.cnblogs.com/xunbu7/p/7067427.html A. why SI: 为什么要用Source Insight呢?因为她比完整的IDE要更快啊,比一般 ...
- react-native中timer的注意点
务必在卸载组件前清除定时器! 我们发现很多 React Native 应用发生致命错误(闪退)是与计时器有关.具体来说,是在某个组件被卸载(unmount)之后,计时器却仍然在运行.要解决这个问题,只 ...
- 第二十五篇-Android 应用资源
这里介绍android的一些资源文件. 以一个登录界面为例. layout.xml <?xml version="1.0" encoding="utf-8" ...
- 第二十四篇-用VideoView制作一个简单的视频播放器
使用VideoView播放视频,视频路径有三种: 1. SD卡中 2. Android的资源文件中 3. 网络视频 第一种,SD卡中的方法. 路径写绝对路径,如果不能播放,可以赋予读取权限. 效果图: ...
- Going Home POJ - 2195 (最小费用最大流)
On a grid map there are n little men and n houses. In each unit time, every little man can move one ...
- 应用实战:从Redis到Aerospike,我们踩了这些坑
个推专注为开发者们提供消息推送服务多年.通过个推SDK,手机终端与服务器建立长连接,维持在线状态.然而在网络异常等情况下,消息无法实时送达到终端用户,因而推送服务器建立了一份离线消息列表,以待用户重新 ...
- 物理服务器Linux下软RAID和UUID方式挂载方法--Megacli64
一.业务部门需求说明:公司最近来了一批服务器,用于大数据业务部署.数据节点服务器由14块物理磁盘,其中有2块是900G的盘,12块是4T的盘.在服务器系统安装时,进入系统的BIOS界面:1)将2块90 ...
- Java集合、Iterator迭代器和增强for循环整理
集合 集合,集合是java中提供的一种容器,可以用来存储多个数据. 数组的长度是固定的.集合的长度是可变的.集合中存储的元素必须是引用类型数据 1.1 ArrayList集合存储元素 pac ...