信号

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

安装:pip3 install blinker

内置信号

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

自定义信号

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

多app应用

  1. from werkzeug.wsgi import DispatcherMiddleware
  2. from werkzeug.serving import run_simple
  3. from flask import Flask, current_app
  4. app1 = Flask('app01')
  5. app2 = Flask('app2')
  6. @app1.route('/index')
  7. def index():
  8. return 'app01'
  9. @app2.route('/index2')
  10. def index2():
  11. return 'app02'
  12. dm = DispatcherMiddleware(app1, {
  13. '/sec': app2,
  14. })
  15. if __name__ == '__main__':
  16. run_simple('localhost', 5000, dm)
  17. # dm.__call__
  18. # 根据请求的路径,执行不同app的__call__方法

flask-script

  1. from flask import Flask
  2. from flask_script import Manager
  3. app = Flask(__name__)
  4. manager = Manager(app)
  5. # 自定制命令
  6. @manager.command
  7. def custom(arg):
  8. '''
  9. 自定义命令
  10. python manage.py custom 123
  11. :param arg:
  12. :return:
  13. '''
  14. print(arg)
  15. @manager.option('-n', '--name', dest='name')
  16. @manager.option('-u', '--url', dest='url')
  17. def cmd(name, url):
  18. '''
  19. 自定义命令(-n也可以写成--name)\
  20. 执行:python manage.py cmd -n xxx -u https://www.baidu.com/
  21. 执行:python manage.py cmd --name xxx --url https://www.baidu.com/
  22. :param name:
  23. :param url:
  24. :return:
  25. '''
  26. print(name, url)
  27. @app.route('/')
  28. def index():
  29. return 'index'
  30. if __name__ == '__main__':
  31. manager.run()

信号、多app应用、flask-script的更多相关文章

  1. flask+script命令行交互工具

    Project name :Flask_Plan templates:templates static:static 首先说,我们flask比django方便的地方是所有的模块都可以自己选,你不喜欢s ...

  2. Flask script 内的Shell 类 使用

    1.集成Python shell 每次自动shell会话都要导入数据库实例和模型,很烦人.为了避免一直重复导入,我们可以做些配置让Flask-Script的Shell命令自动导入特定的对象.若想把对象 ...

  3. Flask deployment on gunicorn with flask script

    https://stackoverflow.com/questions/34265870/flask-deployment-on-gunicorn-with-flask-script 依赖 Flask ...

  4. flask使用blinker信号机制解耦业务代码解决ImportError: cannot import name 'app',以异步发送邮件为例

    百度了大半天,不知道怎么搞,直到学习了blinker才想到解决办法,因为之前写java都是文件分开的, 所以发送邮件业务代码也放到view里面,但是异步线程需要使用app,蛋疼的是其他模块不能从app ...

  5. python 全栈开发,Day142(flask标准目录结构, flask使用SQLAlchemy,flask离线脚本,flask多app应用,flask-script,flask-migrate,pipreqs)

    昨日内容回顾 1. 简述flask上下文管理 - threading.local - 偏函数 - 栈 2. 原生SQL和ORM有什么优缺点? 开发效率: ORM > 原生SQL 执行效率: 原生 ...

  6. Flask —— 信号(5)

    Flask框架中的信号基于blinker,其主要就是让开发者可是在flask请求过程中定制一些用户行为. pip3 install blinker 1. 内置信号 request_started = ...

  7. flask多app和栈的应用

    一.简介     flask的蓝图可以实现url的分发,当有多个app时也可以利用app进行url分发,这里介绍下使用方式和内部原理以及栈的应用. 二.多app使用 使用示例 from werkzeu ...

  8. Flask学习【第6篇】:Flask中的信号

    实例化补充 instance_path和instance_relative_config是配合来用的.这两个参数是用来找配置文件的,当用app.config.from_pyfile('settings ...

  9. flask信号使用

    flask信号: 安装: flask中的信号使用的是一个第三方插件,叫做blinker.通过pip list看一下,如果没有安装,通过以下命令即可安装blinker: pip install blin ...

  10. flask之信号

    Flask框架中的信号基于blinker,其主要就是让开发者可是在flask请求过程中定制一些用户行为. pip3 install blinker 1. 内置信号 request_started = ...

随机推荐

  1. springboot-遇到的错误

    1.Field userMapper in com.yanan.outjob.controller.SysUserController required a bean of type 'com.yan ...

  2. nvm -- node 多版本管理器

    Node.js 越来越热,应用的场景也越来越多. 在开发中,我们可能同时在进行多个 node 项目,而这些不同的项目所使用的 node 版本又是不一样的,或者是要用更新的 node 版本进行试验和学习 ...

  3. Hibernate在MySQL中查询区分大小写

    MySQL查询中默认是不区分大小写的,比如如下语句: SELECT * from PersonBehDevice where flag=0 AND devicecode ='ddjc' 查询结果如下: ...

  4. 瑞发科NS1081主控 + THGBM5G7A2JBAIR(eMMC) 制作16GB闪存驱动器

    文档标识符:NS1081_FLASH-DRIVE_D-P9 作者:DLHC 最后修改日期:2020.8.22 本文链接:https://www.cnblogs.com/DLHC-TECH/p/NS10 ...

  5. mysql高级内容学习总结

    创建索引 create [unique] index indexname on tablename(columnname(length)) alter tablename add [unique] i ...

  6. C#串口通讯,复制粘贴就可用,仅仅介绍怎样最快的搭建一个串口通讯,异常拦截等等需要自己加上

    using System; using System.Collections.Generic; using System.IO.Ports; using System.Text; //串口通讯类 pu ...

  7. make编译出错 usr/bin/ld: /data/app/openssl/lib/libcrypto.a(ecs_asn1.o): relocation R_X86_64_PC32 against symbol `ECDSA_SIG_it' can not be used when making a shared object; recompile with -fPIC

    当make编译出现错误 usr/bin/ld: /data/app/openssl/lib/libcrypto.a(ecs_asn1.o): relocation R_X86_64_PC32 agai ...

  8. [NOI2020]美食家 题解

    题意分析 给出一个带权有向图,要求从节点 $1$ 出发,经过恰好 $T$ 的边权和,回到节点 $1$ ,求可经过的最大点权和.特别地,经过的边权和达到部分特殊数时,会有某个点的点权发生改变. 思路分析 ...

  9. jieba分词-强大的Python 中文分词库

    1. jieba的江湖地位 NLP(自然语言)领域现在可谓是群雄纷争,各种开源组件层出不穷,其中一支不可忽视的力量便是jieba分词,号称要做最好的 Python 中文分词组件. 很多人学习pytho ...

  10. 让这个Java语言的开源商城系统火起来

    Java是一门非常优秀的面向对象编程语言,功能强大且简单易用,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承.指针等概念,凭借其简单性.面向对象.分布式.健壮性.安全性.平台独立与可 ...