zoukankan      html  css  js  c++  java
  • 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
    

      

  • 相关阅读:
    加密和解密配置节(asp2.0以后)http://www.cnitblog.com/lby91772/archive/2008/03/04/40436.html
    多线程消息队列 (MSMQ) 触发器 http://blog.sina.com.cn/s/blog_405ad00201007rlw.html
    NUnit的使用
    HDU 1896 Stones
    POJ 1862 Stripies(哈夫曼)
    ZOJ 3230 Solving the Problems
    HDU 1242 Rescue(BFS)
    ZOJ 3410 Layton's Escape
    求逆序数
    HDU 1873 看病要排队
  • 原文地址:https://www.cnblogs.com/zhangningyang/p/8276909.html
Copyright © 2011-2022 走看看