近段时间以来,深刻的意识到了落实到行动上这句话的意义了。一直以来,看到某些好文章,突然后了好点子,就想着待会再看。然而碎片化的时间越来越碎,终究不能得偿所愿。

于是,做了一个简单的小工具,方便自己记录点滴小事,也希望能给自己一个督促。做一个行动派

我给它命名为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+端口就可以顺利的访问到了。


本文转载:CSDN博客