近段時間以來,深刻的意識到了落實到行動上這句話的意義了。一直以來,看到某些好文章,突然後了好點子,就想著待會再看。然而碎片化的時間越來越碎,終究不能得償所願。
於是,做了一個簡單的小工具,方便自己記錄點滴小事,也希望能給自己一個督促。做一個行動派。
我給它命名為**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+埠就可以順利的訪問到了。