近段时间以来,深刻的意识到了落实到行动上这句话的意义了。一直以来,看到某些好文章,突然后了好点子,就想着待会再看。然而碎片化的时间越来越碎,终究不能得偿所愿。
于是,做了一个简单的小工具,方便自己记录点滴小事,也希望能给自己一个督促。做一个行动派。
我给它命名为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+端口就可以顺利的访问到了。