zoukankan      html  css  js  c++  java
  • Flask_script扩展调用的方式

    Flask中flask-script扩展的使用

    通过使用Flask-Script扩展,我们可以在Flask服务器启动的时候,通过命令行的方式传入参数。而不仅仅通过app.run()方法中传参

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

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


    from flask import Flask
    from flask_script import Manager app = Flask(__name__) manager = Manager(app)
    @manager.command def hello(): print "hello" if __name__ == "__main__": manager.run()

    只要像上面一样定义你自己的命令脚本,就可以在命令行中如下调用他们:

     python 文件名.py  函数名

    python manage.py hello         
    > hello
    

    安装Flask-Script

    pip install Flask-Script

     

    Manager只有一个参数:一个Flask实例。

    其次,创建并且加入命令。有三种方法可创建命令:

    • 创建Command的子类
    • 使用 @command 修饰符
    • 使用 @option 修饰符

    下面是一个简单的例子,创建一个Hello命令,该命令只是简单的输出“hello word”。

    from flask.script import Command
    
    class Hello(Command):
       
        def run(self):
            print "hello world"
    

    再把上面创建的Hello命令加入Manager实例:

    manager.add_command('hello', Hello())
    

    现在执行下面的命令:

    python manage.py hello
    > hello world
    
    
    

    第一种方法是最适用的,但也是最麻烦的。对于简单的命令,只需要使用Command实例的@command修饰符。

    @manager.command
    def hello():
        
        print "hello"
    

    这种方法创建的命令的运行方式和Command类创建的运行方式是相同的。

    python manage.py hello
    > hello

    第三种方式@option修饰符适用于更精细的命令行控制
    @manager.option('-n', '--name', help='Your name')
    def hello(name):
        print "hello", name
    

    增加命令行参数

    大多数命令都带有参数。还是上面的例子,如果不仅仅是打印"hello world",还想输出一个额外的名字,如:

    python manage.py hello --name=Joe
    hello Joe
    

    为实现这一功能,需要使用Command类的option_list属性。

    from flask_script import Command, Manager, Option
    
    class Hello(Command):
    
        option_list = (
            Option('--name', '-n', dest='name'),
        )
    
        def run(self, name):
            print "hello %s" % name
    

    另一种方法是为你的Command类定义一个get_options方法,这将在希望依赖运行实例返回值来得到参数时非常有效。

    class Hello(Command):
    
        def __init__(self, default_name='Joe'):
            self.default_name=default_name
    
        def get_options(self):
            return [
                Option('-n', '--name', dest='name', default=self.default_name),
            ]
    
        def run(self, name):
            print "hello",  name
    

    若使用@command修饰符,参数将直接自动的从函数的参数中获取:

    @manager.command
    def hello(name):
        print "hello", name
    
    > python manage.py hello Joe
    hello Joe

    调用方法如下:

    > python manage.py hello --name=Joe
    hello Joe
    

    或者:

    > python manage.py hello -n Joe
    hello Joe
    

    -n 是由参数的第一个字母决定的。所以"name" > "-n"

    其次,-h选项通常输出命令的帮助文档,所以避免使用h开头的参数。

    
    

    @command修饰符随便简单好用,但在复杂情况下,@option是更好的选择:

    @manager.option('-n', '--name', dest='name', default='joe')
    def hello(name):
        print "hello", name
    

    可以增加更多的选项参数:

    @manager.option('-n', '--name', dest='name', default='joe')
    @manager.option('-u', '--url', dest='url', default=None)
    def hello(name, url):
        if url is None:
            print "hello", name
        else:
            print "hello", name, "from", url
    

    可以这样调用:

    > python manage.py hello --name=Joe --url=reddit.com
      hello Joe from reddit.com
  • 相关阅读:
    getter 和 setter方法
    了解coredata 数据库的博客
    iOS 本地缓存简述
    iOS 9.0 xcode7
    iOS 直播推流SDK -- PLCameraStreamingKit
    时间充裕的时候看看技术总结
    技术分享7
    学习笔记-音频编解码
    学习笔记-weak strong ARC mrc
    飘雪效果的swf
  • 原文地址:https://www.cnblogs.com/skaarl/p/9418549.html
Copyright © 2011-2022 走看看