#!/usr/bin/env python # -*- coding:utf-8 -*- # # Author : XueWeiHan # Date : 17/6/9 上午9:50 import os import traceback from flask import Flask, request, url_for, jsonify from playhouse.flask_utils import FlaskDB from flask_wtf import CSRFProtect from config import logger, flask_config from models.base import database from views import InvalidUsage from views.home import home from views.profile import profile from views.manage import manage app = Flask(__name__) app.config.from_mapping(flask_config) app.register_blueprint(home) app.register_blueprint(profile) app.register_blueprint(manage) flask_db = FlaskDB(app, database) CSRFProtect(app) def dated_url_for(endpoint, **values): """ 重写 url_for 函数:静态文件加上时间戳,使之即时生效 """ if endpoint == 'static': filename = values.get('filename', None) if filename: file_path = os.path.join(app.root_path, endpoint, filename) values['q'] = int(os.stat(file_path).st_mtime) return url_for(endpoint, **values) @app.errorhandler(InvalidUsage) def handle_invalid_usage(error): response = jsonify(error.to_dict()) response.status_code = error.status_code return response @app.context_processor def override_url_for(): return dict(url_for=dated_url_for) @app.after_request def after_request(response): logger.info('%s %s %s %s %s', request.method, request.environ.get('HTTP_X_REAL_IP', request.remote_addr), request.scheme, request.full_path, response.status) return response @app.errorhandler(Exception) def exceptions(e): tb = traceback.format_exc() tb = tb.decode('utf-8') logger.error('%s %s %s %s 5xx INTERNAL SERVER ERROR\n%s', request.environ.get('HTTP_X_REAL_IP', request.remote_addr), request.method, request.scheme, request.full_path, tb) return '500 INTERNAL SERVER ERROR', 500