Flask笔记-自定义扩展

2017-09-05  本文已影响0人  huozhihui
1. 创建扩展包目录,结构如下:
flask-logging/
  ├ LICENSE            # 授权说明
  ├ README             # 项目介绍
  ├ setup.py           # 打包分发文件
  └ flask_logging/     # 扩展代码包
      └ __init__.py    # 扩展代码

注意:根据Flask扩展命名规范,约束如下:

2. 编写“setup.py”文件
"""
Flask-Logging
-------------
For the view access and the expansion of the log
"""

from setuptools import setup
 
setup(
    name='Flask-Logging',
    version='1.0',
    url='http://example.com/flask-logging/',
    license='BSD',
    author='Huo',
    author_email='240516816@qq.com',
    description='For the view access and the expansion of the log',
    long_description=__doc__,
    packages=['flask_logging'],
    zip_safe=False,
    include_package_data=True,
    platforms='any',
    install_requires=[
        'Flask'
    ],
    classifiers=[
        'Environment :: Web Environment',
        'Intended Audience :: Developers',
        'License :: OSI Approved :: BSD License',
        'Operating System :: OS Independent',
        'Programming Language :: Python',
        'Topic :: Internet :: WWW/HTTP :: Dynamic Content',
        'Topic :: Software Development :: Libraries :: Python Modules'
    ]
)

注意:

3. 编写扩展代码,__init__.py
#coding:utf8
from flask import current_app, request
from functools import wraps
from logging.handlers import TimedRotatingFileHandler
import logging
import time
 
# 指定日志文件名,日志级别,及日志记录格式
my_log = TimedRotatingFileHandler('my_log.log','D')
my_log.setLevel(logging.DEBUG)
my_log.setFormatter(logging.Formatter('%(asctime)s %(levelname)s: %(message)s'))
 
class Logging:
    # 构造函数
    def __init__(self, app=None):
        self.app = app
        if app is not None:
            self.init_app(app)
 
    # 初始化应用
    def init_app(self, app):
        app.logger.addHandler(my_log)
 
    # 视图装饰器,被装饰的视图将自动记录访问日志
    def print_log(self, func):
        app = self.app or current_app
        @wraps(func)
        def decorator(*args, **kwargs):
            start = time.time()
            # 记录请求开始
            app.logger.debug('Start request call: %s' % request.url)
            ret = func(*args, **kwargs)
            # 记录请求结束
            app.logger.debug('Finish request call: %s' % request.url)
            duration = time.time() - start
            # 记录请求所耗时长
            app.logger.debug('Request: %s consumed %f s' % (request.url, duration))
            return ret
 
        return decorator

注意:

4. 创建应用,测试扩展包
from flask import Flask
from flask_logging import Logging
 
app = Flask(__name__)
logging = Logging(app)
 
@app.route('/')
@logging.print_log
def index():
    return '<h1>Hello World</h1>'
 
if __name__ == '__main__':
    app.run(host='0.0.0.0', debug=True)

启动应用,访问“http://localhost:5000/”,即可看到代码的当前路径下新生成的“my_log.log”文件。

6. 扩展包提交及审核

如果想提交自己的扩展包到官网,则至少需满足以下审核条件:

本文参考:思诚之道

更多参考:
Flask扩展官方英文文档
Flask扩展官方中文文档
官方扩展列表中已有扩展

上一篇 下一篇

猜你喜欢

热点阅读