近段时间以来,深刻的意识到了落实到行动上这句话的意义了。一直以来,看到某些好文章,突然后了好点子,就想着待会再看。然而碎片化的时间越来越碎,终究不能得偿所愿。
于是,做了一个简单的小工具,方便自己记录点滴小事,也希望能给自己一个督促。做一个行动派。
我给它命名为**TODO list
** ,意思就是待办事项清单。源码已经放到了github上。有兴趣的可以大致的看一下。https://github.com/guoruibiao/worktools/tree/master/todolist
基本上完成的效果有这么几个样子。完全是按照我自己的需求做的,所以可能不适合所有人的品味。
- 工具首页
-
工具详情页
-
完成任务后
踩坑记录
本来是想着用Flask,顺便练习下RESTful。然后借助uwsgi和nginx完整地实现一下整个服务,结果uwsgi配置这块出了点问题,就直接用nginx代理http服务了。
遇到的坑有这么几个,这里也罗列下,如果刚好对你有所帮助,那我也是挺欣慰的了。
序列化问题
标准库json出现类似于XXX is not JSON serializable。 经过调试发现是pymysql获取结果集的时候,将timestamp类型的数据转成了datetime.datetime类型。因此出现上述错误。解决办法如下:
编码部分
class DateEncoder(json.JSONEncoder): """ 解决使用pymysql拿到的数据值中有datetime类型导致的错误 """ def default(self, obj): if isinstance(obj, datetime.datetime): return obj.strftime('%Y-%m-%d %H:%M:%S') elif isinstance(obj, datetime.date): return obj.strftime("%Y-%m-%d") else: return json.JSONEncoder.default(self, obj)复制代码
应用部分:
def query(self, sql="", single=True): cursor = self.conn.cursor() effected_rows = cursor.execute(sql) fields = cursor.description if single: rs = cursor.fetchone() else: rs = cursor.fetchall() cursor.close() # 另类的XXX不能被默认的json库序列化的问题 rs = json.dumps(rs, cls=DateEncoder) rs = json.loads(rs) return (effected_rows, fields, rs)复制代码
如此,便可以搞定序列化问题了。
flask外网访问问题
默认的host是**localhost
(或者127.0.0.1
),这样在debug模式下,本地是可以访问的。但是如果想被外网访问到,host就需要改成0.0.0.0
**。这样在服务器上的程序,通过ip+端口就可以顺利的访问到了。