手上有个微信小程序项目,因为对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:

[1] 微信小程序中做用户登录与登录态维护的实现详解

[2] 小程序的登录和数据解密全解析

微信小程序 后端用Flask实现的更多相关文章

  1. 关于开发微信小程序后端linux使用xampp配置https

    关于开发微信小程序后端linux使用xampp配置https 背景 由于最近开发微信小程序,前后端交互需要使用https协议,故需要配置https服务 服务器环境 服务器系统 ubuntu 环境 xa ...

  2. 微信小程序后端开发流程

    微信小程序后端开发流程根据官网总结为两个步骤 1.前端调用 wx.login 返回了code,然后调用wx.getUserInfo获取到用户的昵称 头像 2.服务端根据code去微信获取openid, ...

  3. 微信小程序后端开发(Java语言)笔记

    前言: 因为是第一次真正接触后端开发,从编码到部署服务器到上线,所以做个笔记,也供和我一样的开发小白一些参考. 一.前期工作:开发环境与工具: 1. 编程语言:Java    #笔者还没学PHP,只想 ...

  4. 微信小程序开发平台新功能「云开发」快速上手体验

    微信小程序开发平台刚刚开放了一个全新的功能:云开发. 简单地说就是将开发人员搭建微信小程序后端的成本再次降低,此文刚好在此产品公测时,来快速上手看看都有哪些方便开发者的功能更新. 微信小程序一直保持一 ...

  5. 微信小程序踩坑集合

    1:官方工具:https://mp.weixin.qq.com/debug/w ... tml?t=1476434678461 2:简易教程:https://mp.weixin.qq.com/debu ...

  6. 微信小程序学习指南

    作者:初雪链接:https://www.zhihu.com/question/50907897/answer/128494332来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明 ...

  7. 开发一款让我们慢慢变好的微信小程序

    1. 前言 朋友,你还记得你想学编程最初的目的是什么吗? 先说说我的吧,我最初想学编程的目的只有一点,感觉编程很酷,会写代码的人很厉害!.随着后面参加工作,我马上产生了让我能够在编程这条路上继续走下去 ...

  8. 微信小程序专题(一)-----微信后台的相关开发

    本人最近在做微信小程序后端的相关开发工作 接触到微信小程序目前来讲需要两个条件 1.前端通过后台服务器去调用微信平台接口,来获取openid: 2.前端必须调用https 跟域名的形式 不得出现ip加 ...

  9. Flask与微信小程序登录(后端)

    开发微信小程序时,接入小程序的授权登录可以快速实现用户注册登录的步骤,是快速建立用户体系的重要一步.这篇文章将介绍 python + flask + 微信小程序实现用户快速注册登录方案(本文主要进行后 ...

随机推荐

  1. 三小时学会Kubernetes:容器编排详细指南

    三小时学会Kubernetes:容器编排详细指南 如果谁都可以在三个小时内学会Kubernetes,银行为何要为这么简单的东西付一大笔钱? 如果你心存疑虑,我建议你不妨跟着我试一试!在完成本文的学习后 ...

  2. js 获取随机数 Math.random()

    js 获取随机数 Math.random() // 结果为0-1间的一个随机数(包括0,不包括1) var randomNum1 = Math.random(); //console.log(rand ...

  3. git的使用命令

    git archive --format zip --output "./test.zip" master -0 将项目的代码通过上述命令打包压缩为test文件夹 ssh-keyg ...

  4. PKUWC2019滚粗记

    真的不想说些什么了,还是自己太菜了,水平低啊.深深感受到NOIP2017以后的那种绝望,这最好的签约清北的机会,就这样白白错过了.本以为自己的应该有NOIAg的实力,运气好是前120吧,没想到自己还是 ...

  5. 使用WinForm Chart控件 制作饼装,柱状,折线图

    http://blog.csdn.net/dream2050csdn/article/details/53510340 chart控件的属性很多,主要用到Chart控件图表区域的属性有五个属性 1.A ...

  6. Day27--Python--初识socket

    一. C\S架构, 客户端服务端架构 客户端(client): 享受服务端提供的服务 服务端(server): 给客户端提供服务 B\S 浏览器和服务端 B (browser) 二. 网络通信的整个流 ...

  7. Proxy代理模式

    https://www.cnblogs.com/vincentzh/p/5988145.html https://www.cnblogs.com/wrbxdj/p/5267370.html(不错)

  8. double free or corruption错误

    这是我自己写代码是遇到的错误,完全想不到报错和写错的地方有关联性,记录下来给别人参考. 不允许转载. WhiteBack(&cut_buff,&out_buff,5)函数内有一段 be ...

  9. 生产环境Linux常用命令【随时更新】

    1. 查询文件中的关键字并高亮显示[查询当前目录关键字为elasticsearch的日志文件] find ./ -name "my-elasticsearch.log" | xar ...

  10. JSP页面用<a>标签访问 Action 出错

    问题: JSP页面 <a href="/crud1/crud1/add.action" >添加</a> struts.xml 中: <package ...