zoukankan      html  css  js  c++  java
  • Flask_Flask-Script脚本扩展的使用(八)

    Flask-Script扩展包提供向Flask插入外部脚本的功能,包括运行一个开发用的服务器,一个定制的Python shell,设置数据库的脚本,cronjobs,及其他运行在web应用之外的命令行任务;使得脚本和系统分开;

    使用Flask-Script扩展包前,需要使用下面命令进行安装

    pip install Flask-Script

    Flask-Script工作方式和Flask本身类似,只需定义和添加从命令行中被Manager实例调用的命令;

    官方文档:http://flask-script.readthedocs.io/en/latest/

    一、基本运用

    首先,创建一个Python模板运行命令脚本,可起名为manager.py;

    在该文件中,必须有一个Manager实例,Manager类追踪所有在命令行中调用的命令和处理过程的调用运行情况;

    Manager只有一个参数——Flask实例,也可以是一个函数或其他的返回Flask实例;

    调用manager.run()启动Manager实例接收命令行中的命令;

    from flask import Flask
    from flask_script import Manager    # 启动命令的管理类
    
    
    app = Flask(__name__)
    # 创建Manager管理类的对象
    manager = Manager(app)
    
    
    @app.route("/index/")
    def index():
        return "hello flask"
    
    
    if __name__ == '__main__':
        # 通过管理对象来启动flask
        manager.run()

    创建好manager.py文件后,不能直接通过启动文件来运行,需要在系统的命令行中通过命令启动。

    上图中通过 runserver 命令启动了服务

    上图中通过shell命令,进入了flask的交互模式。

    我们可以通过 --help查看其它可用命令

     

     并且可以通过 命令+ --help查看每个命令的可用参数

    二、自定义命令

    除了 runserver和shell命令,我们还可以创建自定义命令,有三种创建命令的方法:

    1. 创建Command子类
    2. 使用 Manager 实例的@command修饰符
    3. 使用 Manager 实例的@option修饰符

    2.1 创建Command子类

    Command子类必须定义一个run方法

    举例:创建Hello命令,并将Hello命令加入Manager实例;

    from flask import Flask
    from flask_script import Manager    # 启动命令的管理类
    from flask_script import Command
    
    app = Flask(__name__)
    # 创建Manager管理类的对象
    manager = Manager(app)
    
    # 1.创建Command子类,并且必须定义一个run方法
    class Hello(Command):
        def run(self):
            print("hello flask")
    
    # 自定义命令
    manager.add_command("hello", Hello())   # hello为命令行的启动命令,Hello()为命令调用的类
    
    
    
    if __name__ == '__main__':
        # 通过管理对象来启动flask
        manager.run()

    运行自定义命令

    自定义命令也可以通过 --help查看

    2.2 使用 Manager 实例的@command修饰符

    from flask import Flask
    from flask_script import Manager    # 启动命令的管理类
    
    
    app = Flask(__name__)
    # 创建Manager管理类的对象
    manager = Manager(app)
    
    
    # 2.使用Command实例的@command修饰符
    @manager.command
    def hi():
        print("hi flask")
    
    
    if __name__ == '__main__':
        # 通过管理对象来启动flask
        manager.run()

    2.3 使用 Manager 实例的@option修饰符

    from flask import Flask
    from flask_script import Manager    # 启动命令的管理类
    
    
    app = Flask(__name__)
    # 创建Manager管理类的对象
    manager = Manager(app)
    
    
    # 3.使用 Manager 实例的@option修饰符
    @manager.option('-n', '--name', dest='name', help='Your name', default='zhangsan')
    # 解释:
    #   -n:参数的简写
    #   --name:参数全称
    #   dest="name":用户在参数后的输入值传递给函数中的name
    #   help='Your name':使用--help查看时的参数解释
    #   default='zhangsan':用户不使用参数时的默认值
    @manager.option('-a', '--age', dest='age', help='Your age', default='18')
    def say(name, age):
        print(F"{name}:{age}")
    
    
    if __name__ == '__main__':
        # 通过管理对象来启动flask
        manager.run()

     附码:

    from flask import Flask
    from flask_script import Manager    # 启动命令的管理类
    from flask_script import Command
    
    app = Flask(__name__)
    # 创建Manager管理类的对象
    manager = Manager(app)
    
    
    # 自定义命令一共3中方法
    # 1.创建Command子类,并且必须定义一个run方法
    class Hello(Command):
        def run(self):
            print("hello flask")
    
    
    # 自定义命令
    manager.add_command("hello", Hello())   # hello为命令行的启动命令,Hello()为命令调用的类
    
    
    # 2.使用 Manager 实例的@command修饰符
    @manager.command
    def hi():
        print("hi flask")
    
    
    # 3.使用 Manager 实例的@option修饰符
    @manager.option('-n', '--name', dest='name', help='Your name', default='zhangsan')
    # 解释:
    #   -n:参数的简写
    #   --name:参数全称
    #   dest="name":用户在参数后的输入值传递给函数中的name
    #   help='Your name':使用--help查看时的参数解释
    #   default='zhangsan':用户不使用参数时的默认值
    @manager.option('-a', '--age', dest='age', help='Your age', default='18')
    def say(name, age):
        print(F"{name}:{age}")
    
    
    if __name__ == '__main__':
        # 通过管理对象来启动flask
        manager.run()

    参考:https://blog.csdn.net/twc829/article/details/52154214

  • 相关阅读:
    js的click事件传递参数方法
    https://en.wikipedia.org/wiki/Log-structured_merge-tree
    窗口标题
    编译器前端 后端
    https://hbase.apache.org/devapidocs/org/apache/hadoop/hbase/util/MurmurHash.html
    修改内存数据
    阿里巴巴建设业务中台的方法论 业务中台规范
    入 Go 必读:大型Go工程的项目结构及实战思考 原创 毛剑 QCon 今天
    https://github.com/golang/go/wiki/CommonMistakes
    goroutines inside of goroutines
  • 原文地址:https://www.cnblogs.com/testlearn/p/14108149.html
Copyright © 2011-2022 走看看