22 :copyright: © 2019 by the Lin team.
33 :license: MIT, see LICENSE for more details.
44"""
5+ import json
6+ import time
57
6- from flask import Flask
8+ from flask import Flask , request , g
79from flask_cors import CORS
810from lin import Lin
911
@@ -25,14 +27,53 @@ def create_tables(app):
2527 db .create_all ()
2628
2729
30+ def register_before_request (app ):
31+ @app .before_request
32+ def request_cost_time ():
33+ g .request_start_time = time .time ()
34+ g .request_time = lambda : "%.5f" % (time .time () - g .request_start_time )
35+
36+
37+ def register_after_request (app ):
38+ @app .after_request
39+ def log_response (resp ):
40+ log_config = app .config .get ('LOG' )
41+ if not log_config ['REQUEST_LOG' ]:
42+ return resp
43+ message = '[%s] -> [%s] from:%s costs:%.3f ms' % (
44+ request .method ,
45+ request .path ,
46+ request .remote_addr ,
47+ float (g .request_time ()) * 1000
48+ )
49+ if log_config ['LEVEL' ] == 'INFO' :
50+ app .logger .info (message )
51+ elif log_config ['LEVEL' ] == 'DEBUG' :
52+ req_body = '{}'
53+ try :
54+ req_body = request .get_json () if request .get_json () else {}
55+ except :
56+ pass
57+ message += " data:{\n \t param: %s, \n \t body: %s\n } " % (
58+ json .dumps (request .args , ensure_ascii = False ),
59+ req_body
60+ )
61+ app .logger .debug (message )
62+ return resp
63+
64+
2865def create_app (register_all = True ):
2966 app = Flask (__name__ , static_folder = './assets' )
3067 app .config .from_object ('app.config.setting' )
3168 app .config .from_object ('app.config.secure' )
69+ app .config .from_object ('app.config.log' )
3270 if register_all :
3371 register_blueprints (app )
3472 Lin (app )
73+ register_before_request (app )
74+ register_after_request (app )
3575 apply_cors (app )
3676 # 创建所有表格
3777 create_tables (app )
78+
3879 return app
0 commit comments