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

Flask_script扩展调用的方式的更多相关文章

  1. c扩展调用php的函数(调用实现php函数的c函数)

    上一次是写的c扩展调用c的标准函数,但是只能调用头文件中申明的函数,今天来说下c扩展调用实现php函数的c函数,比方说,c扩展要用到php中ip2long这个函数,但是c不可能去php中调用,肯定是去 ...

  2. Eclipse扩展安装插件方式

    Eclipse安装插件经常使用的是直接安装的方式,就是将插件中包含的plugins和features文件夹中的内容直接复制到了Eclipse的plugins和features文件夹内,这样很容易导致插 ...

  3. java如何调用接口方式二

    java如何调用接口 在实际开发过程中,我们经常需要调用对方提供的接口或测试自己写的接口是否合适,所以,问题来了,java如何调用接口?很多项目都会封装规定好本身项目的接口规范,所以大多数需要去调用对 ...

  4. java如何调用接口方式一

    java如何调用接口 其实对于java调用接口进行获取对方服务器的数据在开发中特别常见,然而一些常用的基础的知识总是掌握不牢,让人容易忘记,写下来闲的时候看看,比回想总会好一些. 总体而言,一些东西知 ...

  5. 一道前端面试题:定义一个方法将string的每个字符串间加个空格返回,调用的方式'hello world'.spacify();

    偶然在群里看到了这道题:定义一个方法将string的每个字符串间加个空格返回,调用的方式'hello world'.spacify(); 这道题主要是对JavaScript对象原型的考察.

  6. IE 扩展调用主窗体中的函数

    IE 扩展调用主窗体中的函数 在函数名前加上 parentWindow 就可以.如: <script>     var doc = external.menuArguments.docum ...

  7. Mudos扩展efunc,packages方式

    Mudos扩展efunc,packages方式 首先packages目录建好C文件 我们这里测试了一个mongodb的 mongodb_spec.c mongodb.h mongodb.c 这里具体的 ...

  8. 两种不同的扩展Scrum的方式

    两种不同的扩展Scrum的方式 1.LeSS和LeSS Huge –大型Scrum LeSS(和LeSS Huge –真正的大型程序)的合著者Craig Larman首先批评了管理,开发人员和客户传统 ...

  9. 大华摄像头报警接口中图片加密,python调用c++方式实现解密

    项目中,大华摄像头的报警信息,里面有图片地址,需要1天内取下来,保持留痕 可惜,图片下载后,加密了,大华提供了android,ios,c++例子,没有提供java解密例子 没办法,只好先用c++例子简 ...

随机推荐

  1. tomcat源码调试2

    前面对tomcat做了一些简单的认识,下面将tomcat源码调试环境搭建起来. 可以参考官网的搭建方法,这里是按照网上的maven管理的方式搭建. 大概步骤是: 1.下载tomcat 9的源码,一般是 ...

  2. tomcat 连接器优化

    在$CATALINA_HOME/conf/server.xml配置文件中的Connetctor节点,和连接数相关的参数配置和优化. maxThreads Tomcat使用线程来处理接收的每个请求.这个 ...

  3. java中hashSet原理

    转自: http://blog.csdn.net/guoweimelon/article/details/50804799 HashSet是JavaMap类型的集合类中最常使用的,本文基于Java1. ...

  4. Javascript 中的 call 和 apply

    发表于 2012年02月1日 by 愚人码头   原文链接:http://www.css88.com/archives/4431 JavaScript 中通过call或者apply用来代替另一个对象调 ...

  5. ora-12154:tns:could not resolve the connect identifier specied

    今天在发布网站时,点击登录之后出现了这个问题,修改一下环境变量,该问题就顺利解决了,解决方法如下: 在环境变量里,找到[Administrator的用户变量(U)],在其之下新建一个用户变量: 变量名 ...

  6. 制作 macOS High Sierra U盘USB启动安装盘方法教程 (全新安装 Mac 系统)

    方法一:使用命令行创建制作 macOS High Sierra 正式版 USB 安装盘 首先,准备一个 8GB 或更大容量的 U盘,并备份好里面的所有资料. 下载好 macOS High Sierra ...

  7. mysql5.7.22安装步骤

    在官网上下载mysql的压缩包,然后解压 (下载地址:https://dev.mysql.com/downloads/mysql/) 1.打开cmd,建议使用管理员的身份打开cmd,如果不用使用管理员 ...

  8. 从0开始 数据结构 AC自动机 hdu 2222

    参考博客 失配指针原理 使当前字符失配时跳转到另一段从root开始每一个字符都与当前已匹配字符段某一个后缀完全相同且长度最大的位置继续匹配,如同KMP算法一样,AC自动机在匹配时如果当前字符串匹配失败 ...

  9. 自学Java测试代码一数据类型、数组使用

    2017-08-22 21:23:37. writer:pprp package test; public class helloWorld { int maxn = 123; //常量,需要定义一个 ...

  10. mac 下测试各种IE版本

    背景 作为前端开发,在谈到兼容性时不得不谈到IE浏览器,那么,如果在mac上该怎么测试各种版本的IE呢 方法 1. 下载VirtualBox虚拟器 2. 下载安装了对应版本的windows系统,htt ...