TODO list小工具,給自己一個交代

菩提樹下的煮茶小童子發表於2018-02-21

近段時間以來,深刻的意識到了落實到行動上這句話的意義了。一直以來,看到某些好文章,突然後了好點子,就想著待會再看。然而碎片化的時間越來越碎,終究不能得償所願。

於是,做了一個簡單的小工具,方便自己記錄點滴小事,也希望能給自己一個督促。做一個行動派

我給它命名為**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+埠就可以順利的訪問到了。

相關文章