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.


分享到:


相關文章: