细数Python Flask微信公众号开发中遇到的那些坑
1. 开发语言及框架
2. 相关文档及Lib库
3. 那些坑
3.1 微信
3.1.1 微信登陆
3.1.2 模版消息
3.2 MySQL
3.2.1 编码问题
3.2.2 SQLAlchemy查询数据转换为Dict
for u in session.query(User).all():
u = dict(u.__dict__)
u.pop('_sa_instance_state', None)
3.4 Flask
3.4.1 cookie相关
@app.route('/set_cookie')
def set_cookie():
response=make_response('Hello World');
response.set_cookie('Name','Joo')
return response
@app.route('/get_cookie')
def get_cookie():
name=request.cookies.get('Name')
return name
@app.route('/del_cookie')
def del_cookie():
response=make_response('delete cookie')
response.set_cookie('Name','',expires=0)
return response
@app.route('/del_cookie')
def del_cookie():
response=make_response('delete cookie')
response.delete_cookie('Name')
return response
3.4.2 flask.make_response() 实例
3.4.3 详细解读Jquery各Ajax函数:$.get(),$.post(),$.ajax(),$.getJSON()
3.4.4 bootstrap对话框插件
3.4.5 Flask flash增加link
3.4.6 HTML颜色编码
3.4.7 Python缓存
微信获取access_token时有效期是7200s,而且微信限制了每天的调用频率(2000次/天),所以简单使用lru_cache在内存中维护了一个token缓冲,示例代码如下:
@lru_cache(None)
def getAccessToken():
url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={0}&secret={1}'.format(app_id, app_secret)
r = requests.get(url)
access_token = r.json().get('access_token')
time_now = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
print '[{0}] getAccessToken Result:\t{1}'.format(time_now, r.text)
return access_token, datetime.now() def getToken():
token, t = getAccessToken()
if (datetime.now() - t).seconds > 3600:
getAccessToken.cache_clear()
token, t = getAccessToken()
return token
else:
return token
参考:
3.4.8 修改Bootstrap使用国内源
bootstrap = lwrap(
WebCDN('//cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/%s/' %
BOOTSTRAP_VERSION), local) jquery = lwrap(
WebCDN('//cdnjs.cloudflare.com/ajax/libs/jquery/%s/' %
JQUERY_VERSION), local) html5shiv = lwrap(
WebCDN('//cdnjs.cloudflare.com/ajax/libs/html5shiv/%s/' %
HTML5SHIV_VERSION)) respondjs = lwrap(
WebCDN('//cdnjs.cloudflare.com/ajax/libs/respond.js/%s/' %
RESPONDJS_VERSION))
bootstrap = lwrap(
WebCDN('//cdn.bootcss.com/twitter-bootstrap/%s/' %
BOOTSTRAP_VERSION), local) jquery = lwrap(
WebCDN('//cdn.bootcss.com/jquery/%s/' %
JQUERY_VERSION), local) html5shiv = lwrap(
WebCDN('//cdn.bootcss.com/html5shiv/%s/' %
HTML5SHIV_VERSION)) respondjs = lwrap(
WebCDN('//cdn.bootcss.com/respond.js/%s/' %
RESPONDJS_VERSION))
3.4.9 flask部署
# coding:utf-8 from tornado.wsgi import WSGIContainer
from tornado.httpserver import HTTPServer
from tornado.ioloop import IOLoop
from run import app
http_server = HTTPServer(WSGIContainer(app)) # address为实际访问URL,port为端口号
http_server.listen(port=5000, address="127.0.0.1")
IOLoop.instance().start()
细数Python Flask微信公众号开发中遇到的那些坑的更多相关文章
- python之微信公众号开发(基本配置和校验)
前言 最近有微信公众号开发的业务,以前没有用python做过微信公众号开发,记录一下自己的学习和开发历程,共勉! 公众号类型 订阅号 普通订阅号 认证订阅号 服务号 普通服务号 认证服务号 服务方式 ...
- 微信公众号开发中遇到的几个bug
一.测试自定义菜单接口时中文菜单名显示为null 设置的中文菜单名,中文未经过编码和解码过程,设置的中文菜单名在最后的微信服务器返回的json格式数据中显示为null. 解决办法:将中文先用uneco ...
- Flask 微信公众号开发
公众号接口 1. 公众号消息会话 目前公众号内主要有这样几类消息服务的类型,分别用于不同的场景. 群发消息 公众号可以以一定频次(订阅号为每天1次,服务号为每月4次),向用户群发消息,包括文字消息.图 ...
- Flask+微信公众号开发(接入指南)
目录 一.注册公众号 二.启用开发者 三.配置服务器配置 四.开发自己的需求 五.写在最后 一.注册公众号 具体的注册过程,根据官方文档一步一步来即可.这里需注意的是订阅号还是服务号:有些比较好的开发 ...
- Python webpy微信公众号开发之 回复图文消息
新建图文回复模板reply_pictext.xml: $def with (toUser,fromUser,createTime,title1,description1,picurl1,url1)&l ...
- .net微信公众号开发——消息与事件
作者:王先荣 本文介绍如何处理微信公众号开发中的消息与事件,包括:(1)消息(事件)概况:(2)验证消息的真实性:(3)解析消息:(4)被动回复消息:(5)发送其他消息. 开源项目地址:h ...
- .net微信公众号开发——群发消息
作者:王先荣 本文将介绍微信公众号开发中用于群发消息的类MassMessage,包括:(1)MassMessage类:(2)群发:(3)删除:(4)预览:(5)查询发送状态:(6)接收推送群发结 ...
- .net微信公众号开发——基础接口
作者:王先荣 本文讲述微信公众号开发中基础接口的使用,包括以下内容: (1)获取许可令牌(AccessToken): (2)获取微信服务器地址: (3)上传.下载多媒体文件: ...
- C#微信公众号开发 -- (一)开发之前的准备
本系列文章讲述的是利用C#语言开发微信公众号的实例教程,主要是服务号的开发(因为订阅号不能获取微信开发的高级接口) 想要开发微信服务公众号,首先必须要有一个认证的微信服务号,这样才能够使用微信提供的所 ...
随机推荐
- 循序渐进之Spring AOP(3) - 配置代理
上一篇介绍了几种Advice(增强),并通过代码演示了生成代理的方式,下面来看通过配置文件配置方式把Advice织入目标类. 注意,配置文件方式仍然不是spring AOP的最好方式,学习配置方式也是 ...
- set排序(个人模版)
set排序: #include<stdio.h> #include<string.h> #include<iostream> #include<set> ...
- Codeforces 626D Jerry's Protest(暴力枚举+概率)
D. Jerry's Protest time limit per test:2 seconds memory limit per test:256 megabytes input:standard ...
- UVA 572 dfs求连通块
The GeoSurvComp geologic survey company is responsible for detecting underground oil deposits. GeoSu ...
- Spider_Man_5.1 の Mongodb_安装
先安装: 环境Mac OS X 我是直接用brew来安装的,感觉这个包管理工具,很省心. 安装Homebrew:ruby -e "$(curl -fsSL https://raw.githu ...
- JavaScript实现职责链模式
什么是职责链模式 职责链模式的定义是:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系,将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止.举个例子:当你从公 ...
- javascript alert乱码的解决方法
http://www.jb51.net/article/42805.htm 提示时中文乱码,拼音什么的都没有问题呀,下面我在论坛找到一解决办法,下面与大家分享. 解决办法一: 复制代码 代码如下: e ...
- 【编程技巧】NSDate,NSDateFormatter,NSTimeInterval
//获取日期 todaysDate=[NSDate date]; //显示日期和时间 dateFormat = [[NSDateFormatter alloc] init];//NSDate没有自己的 ...
- 开源三维地球GIS引擎Cesium常用功能的开发
Cesium是一个非常优秀的三维地球GIS引擎(开源且免费).能够加载各种符合标准的地图图层,瓦片图.矢量图等都支持.支持3DMax等建模软件生成的obj文件,支持通用的GIS计算:支持DEM高程图. ...
- Debugging java application with netbean
Debugging Java Applications with NetBeans from:https://manikandanmv.wordpress.com/2009/09/24/debu ...