• 信号、多app应用、flask-script


    信号

    Flask 框架中的信号基于blinker,其只要就是让开发者可以在flak请求过程中制定一些用户行为
    安装:pip3 install blinker

    内置信号

    request_started = _signals.signal('request-started')                # 请求到来前执行
    request_finished = _signals.signal('request-finished')              # 请求结束后执行
     
    before_render_template = _signals.signal('before-render-template')  # 模板渲染前执行
    template_rendered = _signals.signal('template-rendered')            # 模板渲染后执行
     
    got_request_exception = _signals.signal('got-request-exception')    # 请求执行出现异常时执行
     
    request_tearing_down = _signals.signal('request-tearing-down')      # 请求执行完毕后自动执行(无论成功与否)
    appcontext_tearing_down = _signals.signal('appcontext-tearing-down')# 应用上下文执行完毕后自动执行(无论成功与否)
     
    appcontext_pushed = _signals.signal('appcontext-pushed')            # 应用上下文push时执行
    appcontext_popped = _signals.signal('appcontext-popped')            # 应用上下文pop时执行
    message_flashed = _signals.signal('message-flashed')                # 调用flask在其中添加数据时,自动触发
    
    # 第一步:编写函数
    def fun(*args,**kwargs):
        print('触发信号',args,kwargs)
    # 第二步:注册信号
    # signals.request_started.connect(func)
    signals.request_finished.connect(func)
    

    自定义信号

    # 第一步:定义信号
    a = _signals.signal('aaa')
    # 第二步:编写函数,绑定信息
    def func(*args, **kwargs):
        print('信号', args, kwargs)
    # 第三步:绑定函数
    a.connect(func)
    # 触发信号:在视图函数中
    a.send('1111', k1='v1')
    

    多app应用

    from werkzeug.wsgi import DispatcherMiddleware
    from werkzeug.serving import run_simple
    from flask import Flask, current_app
    
    app1 = Flask('app01')
    app2 = Flask('app2')
    
    
    @app1.route('/index')
    def index():
        return 'app01'
    
    
    @app2.route('/index2')
    def index2():
        return 'app02'
    
    
    dm = DispatcherMiddleware(app1, {
        '/sec': app2,
    })
    
    if __name__ == '__main__':
        run_simple('localhost', 5000, dm)
        # dm.__call__
        # 根据请求的路径,执行不同app的__call__方法
    
    

    flask-script

    from flask import Flask
    from flask_script import Manager
    
    app = Flask(__name__)
    
    manager = Manager(app)
    
    
    # 自定制命令
    
    @manager.command
    def custom(arg):
        '''
        自定义命令
        python manage.py custom 123
        :param arg:
        :return:
        '''
        print(arg)
    
    
    @manager.option('-n', '--name', dest='name')
    @manager.option('-u', '--url', dest='url')
    def cmd(name, url):
        '''
        自定义命令(-n也可以写成--name)
        执行:python manage.py cmd -n xxx -u https://www.baidu.com/
        执行:python manage.py cmd --name xxx --url https://www.baidu.com/
        :param name:
        :param url:
        :return:
        '''
        print(name, url)
    
    
    @app.route('/')
    def index():
        return 'index'
    
    
    if __name__ == '__main__':
        manager.run()
    
    
  • 相关阅读:
    Extjs 动态改变列名
    ext+dwr DynamicGridPanel 封装 态创建ext grid
    extjs 动态表单模板二
    extjs 动态表单模板
    EXTJS 学习笔记(共17项,20090924更新)
    Ext核心API详解Ext.tree.TreePanel
    ExtJS GridPanel动态加载列
    ExtJs之combobox详解
    在 LotusScript 中为自定义对象模拟事件
    Firefox下如何将回车键转为Tab键
  • 原文地址:https://www.cnblogs.com/ShenJunHui6/p/11219532.html
Copyright © 2020-2023  润新知