Dataset基於SQLAlchemy的便利工具

flask上下文處理器

Flask 上下文處理器自動向模板的上下文中插入新變量。上下文處理器在模板渲染之前運行,並且可以在模板上下文中插入新值。上下文處理器是一個返回字典的函數,這個字典的鍵值最終將傳入應用中所有模板的上下文:

@app.context_processordef inject_user():return dict(user=g.user)

上面的上下文處理器使得模板可以使用一個名為user值為g.user的變量。不過這個例子不是很有意思,因為g在模板中本來就是可用的,但它解釋了上下文處理器是如何工作的。

變量不僅限於值,上下文處理器也可以使某個函數在模板中可用(由於Python允許傳遞函數):

@app.context_processordef utility_processor():def format_price(amount, currency=u'€'):return u'{0:.2f}{1}.format(amount, currency)return dict(format_price=format_price)上面的上下文處理器使得format_price函數在所有模板中可用:{{ format_price(0.33) }}

日誌記錄

handler = logging.FileHandler(‘flask.log’, encoding=’UTF-8′)

1、請求之前設置requestId並記錄日誌

每個URL請求之前,定義requestId並綁定到g

@app.before_requestdef before_request():g.requestId = gen_requestId()logger.info("Start Once Access, and this requestId is %s" % g.requestId)

2、請求之後添加響應頭與記錄日誌

每次返回數據中,帶上響應頭,包含API版本和本次請求的requestId,以及允許所有域跨域訪問API, 記錄訪問日誌

@app.after_requestdef add_header(response):response.headers["X-SaintIC-Media-Type"] = "saintic.v1"response.headers["X-SaintIC-Request-Id"] = g.requestIdresponse.headers["Access-Control-Allow-Origin"] = "*"logger.info(json.dumps({"AccessLog": {"status_code": response.status_code,"method": request.method,"ip": request.headers.get('X-Real-Ip', request.remote_addr),"url": request.url,"referer": request.headers.get('Referer'),"agent": request.headers.get("User-Agent"),"requestId": str(g.requestId),}}))return response

basicConfig方法可以滿足你在絕大多數場景下的使用需求,但是basicConfig有一個很大的缺點。調用basicConfig其實是給root logger添加了一個handler(FileHandler ),這樣當你的程序和別的使用了 logging的第三方模塊一起工作時,會影響第三方模塊的logger行為。這是由logger的繼承特性決定的

logging.basicConfig(level=logging.DEBUG,format='%(asctime)s %(levelname)s %(message)s',datefmt='%a, %d %b %Y %H:%M:%S',filename='logs/pro.log',filemode='w')logging.debug('dddddddddd')

MySQL字符編碼

除了設置數據庫的之外,由於dataset默認創建數據庫和表的字符集不是utf8,所以需要自己設置,否則會中文亂碼,所以需要修改表的字符集

my.cnf[client]default-character-set=utf8[mysqld]character-set-server=utf8collation-server=utf8_general_cidefault-storage-engine=INNODB

表的字符集

show create table tasks;alter table tasks convert to character set utf8;

End.


分享到:


相關文章: