Flask快速入门day 05(信号的使用,flask-script)

Flask框架

一、信号

1、简介

什么是信号:

Flask框架中的信号基于blinker(安装这个模块),其主要就是让开发者可是在flask请求过程中定制一些用户行为 ,flask 和django都有

观察者模式,又叫发布-订阅(Publish/Subscribe) 23 种设计模式之一

使用场景:

  • 例如:
    • 在数据库增加一条记录时,执行一些操作
    • 执行到一些代码时自动触发,执行也写操作

2、信号的使用方法

模块安装:

-1、安装blinker模块
	# 在flask中,信号是基于blinker这个模块的
	pip install blinker

2、1.内置信号

- 1、使用flask导入signal
	from flask import signals

- 2、选择需要使用的方法
    # 这里使用的请求进入自动执行
    from . import home_bp
    from flask import signals

    app = home_bp
	 
    # 请求进入就会执行
    def func(*args, **kwargs):
        print('我执行了')
        return True


    # 将需要执行的函数传入
    signals.request_started.connect(func)


    @app.route('/', endpoint='index')
    def index():
        return 'ok'
信号 用法简介
request_started 请求到来前执行
request_finished 请求结束后执行
before_render_template 模板渲染前执行
template_rendered 模板渲染后执行
got_request_exception 请求执行出现异常时执行
request_tearing_down 请求执行完毕后自动执行(无论成功与否)
appcontext_tearing_down 应用上下文执行完毕后自动执行(无论成功与否)
appcontext_pushed 应用上下文push时执行
appcontext_popped 应用上下文pop时执行
message_flashed 调用flask在其中添加数据时,自动触发
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在其中添加数据时,自动触发

2、2.自定义信号

- 1、内置信号的使用步骤
	1)写一个函数
	2)绑定内置信号
 	3)等待触发
    
- 2、具体用法
    from . import home_bp
    from flask import  session, request

    from flask.signals import _signals

    app = home_bp

    # 自定义信号(举例session设置值的时候自动触发)
    session_set = _signals.signal('这里是别名')


    def func(*args, **kwargs):
        print(args)  # (<Request 'http://127.0.0.1:5000/home/' [GET]>,)
        print(kwargs)  # {}
        print('session设置值了')  # 这里还可以执行很多操作
        return True


    # 传入绑定的函数
    session_set.connect(func)


    @app.route('/', endpoint='index')
    def index():
        session['name'] = 'kangkang'
        # 在session设置值后手动触发(这里可以传入参数)
        session_set.send(request)
        return 'ok'

二、flask-script

1、简介

什么是flask-script:

可以通过命令来启动flask项目,例如django可以使用python manage.py runserver

2、命令启动项目

模块安装:

- 1、需求模块
    Flask==2.2.2
    Flask_Script==2.0.3

-2、代码实现
    -安装:pip3.8 install flask-script
    -修改代码:
        from src import app
        from flask_script import Manager

        if __name__ == '__main__':
            manage = Manager(app)
            manage.run()
    -用命令启动
    	python manage.py runserver

3、自定义命令

# 单自定制命令
@manager.command
def custom(arg):
    # 命令的代码,比如:初始化数据库, 有个excel表格,使用命令导入到mysql中
    print(arg)

# 复杂一些的自定制命令
@manager.option('-n', '--name', dest='name')
@manager.option('-u', '--url', dest='url')
def cmd(name, url):
    # python run.py cmd -n lqz -u xxx
    # python run.py cmd --name lqz --url uuu
    print(name, url)
    
posted @ 2023-04-10 22:00  kangshong  阅读(38)  评论(0编辑  收藏  举报