• Flask-Script


    Flask-Scropt插件:为在Flask里编写额外的脚本提供了支持。这包括运行一个开发服务器,一个定制的Python命令行,用于执行初始化数据库、定时任务和其他属于web应用之外的命令行任务的脚本。

    一. 使用 Flask-Script 支持命令行选项

    1.安装

    1
    $ pip install flask-script

    2.创建并运行命令行

    第一步需要创建一个可以运行你脚本命令的Python模块。你可以随意命名它。我这里就以manage.py为例。

     在manage.py文件中,需要先创建一个Manager实例。Manager类会跟踪所有的命令和命令行调用的参数:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    from flask_script import Manager
     
    app = Flask(__name__)
    # configure your app
     
    manager = Manager(app)
     
    if __name__ == "__main__":
        manager.run()

    二. 添加自定义命令

    创建自定义命令的三种方式:

    • 定义Command类的子类
    • 使用@command装饰器
    • 使用@option装饰器

    (1) 定义Command类的子类

    为了简单,我们就创建一个hello命令来输出“hello world”:

    1
    2
    3
    4
    5
    6
    7
    from flask_script import Command
     
    class Hello(Command):
        "prints hello world"
     
        def run(self):
            print "hello world"

     接下来需要把命令添加到Mannager实例:

    1
    manager.add_command('hello', Hello())
    from flask_script import Manager,Command
    from flask import Flask
    app = Flask(__name__)
    
    manager = Manager(app)
    
    class hello(Command):
        "prints hello world"
        def run(self):
            print("hello world")
    
    manager.add_command('hello', hello())
    
    if __name__ == "__main__":
        manager.run()
    完整代码如下
    在命令行运行如下命令:
    (1)python manage.py hello
    hello world
    (2)python manage.py
    usage: manage.py [-?] {hello,shell,runserver} ...
    
    positional arguments:
      {hello,shell,runserver}
        hello               prints hello world
        shell               Runs a Python shell inside Flask application context.
        runserver           Runs the Flask development server i.e. app.run()
    
    optional arguments:
      -?, --help            show this help message and exit
    
    也可以通过把包含Command实例的字典作为manager.run()的参数:
    manager.run({'hello' : Hello()})

    (2)使用@command装饰器

     对于简单的命令,我们可以使用属于Manager实例的@command装饰器

    1
    2
    3
    4
    @manager.command
    def hello():
        "Just say hello"
        print("hello")

    该方法创建命令的运行方式和Command类创建的运行方式相同;

    python manager.py hello
    > hello world

     (3)使用@option装饰器

    如果需要通过命令行进行比较复杂的控制,可以使用Manager实例的@option装饰器。

    --可以有多个@option选项参数;

    from flask_script import Manager  
    from debug import app  
      
    manager = Manager(app)  
     
    @manager.option('-n', '--name', dest='name', help='Your name', default='world')    #命令既可以用-n,也可以用--name,dest="name"用户输入的命令的名字作为参数传给了函数中的name
    @manager.option('-u', '--url', dest='url', default='www.csdn.com')  #命令既可以用-u,也可以用--url,dest="url"用户输入的命令的url作为参数传给了函数中的url
    
    def hello(name, url):  
    'hello world or hello <setting name>'  
        print 'hello', name  
        print url  
      
    if __name__ == '__main__':  
        manager.run()  
    

    运行方式如下:

    python manager.py hello
    >hello world
    >www.csdn.com
    
    python manager.py hello -n sissiy -u www.sissiy.com
    > hello sissiy
    >www.sissiy.com
    
    python manager.py hello -name sissiy -url www.sissiy.com
    > hello sissiy
    >www.sissiy.com
    

      

  • 相关阅读:
    修改linux的hostname (修改linux系统的IP和hostname)
    linux自动ftp上传与下载文件的简单脚本
    Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password)
    用SQL命令查看Mysql数据库大小
    linux screen 命令详解
    mysql常用命令
    Linux 设置mysql开机启动
    源码编译mysql 5.5+ 安装过程全记录
    nagios-plugins安装报错--with-mysql: no
    Spark 中在处理大批量数据排序问题时,如何避免OOM
  • 原文地址:https://www.cnblogs.com/zhangningyang/p/8276909.html
Copyright © 2020-2023  润新知