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
Flask_script扩展调用的方式的更多相关文章
- c扩展调用php的函数(调用实现php函数的c函数)
上一次是写的c扩展调用c的标准函数,但是只能调用头文件中申明的函数,今天来说下c扩展调用实现php函数的c函数,比方说,c扩展要用到php中ip2long这个函数,但是c不可能去php中调用,肯定是去 ...
- Eclipse扩展安装插件方式
Eclipse安装插件经常使用的是直接安装的方式,就是将插件中包含的plugins和features文件夹中的内容直接复制到了Eclipse的plugins和features文件夹内,这样很容易导致插 ...
- java如何调用接口方式二
java如何调用接口 在实际开发过程中,我们经常需要调用对方提供的接口或测试自己写的接口是否合适,所以,问题来了,java如何调用接口?很多项目都会封装规定好本身项目的接口规范,所以大多数需要去调用对 ...
- java如何调用接口方式一
java如何调用接口 其实对于java调用接口进行获取对方服务器的数据在开发中特别常见,然而一些常用的基础的知识总是掌握不牢,让人容易忘记,写下来闲的时候看看,比回想总会好一些. 总体而言,一些东西知 ...
- 一道前端面试题:定义一个方法将string的每个字符串间加个空格返回,调用的方式'hello world'.spacify();
偶然在群里看到了这道题:定义一个方法将string的每个字符串间加个空格返回,调用的方式'hello world'.spacify(); 这道题主要是对JavaScript对象原型的考察.
- IE 扩展调用主窗体中的函数
IE 扩展调用主窗体中的函数 在函数名前加上 parentWindow 就可以.如: <script> var doc = external.menuArguments.docum ...
- Mudos扩展efunc,packages方式
Mudos扩展efunc,packages方式 首先packages目录建好C文件 我们这里测试了一个mongodb的 mongodb_spec.c mongodb.h mongodb.c 这里具体的 ...
- 两种不同的扩展Scrum的方式
两种不同的扩展Scrum的方式 1.LeSS和LeSS Huge –大型Scrum LeSS(和LeSS Huge –真正的大型程序)的合著者Craig Larman首先批评了管理,开发人员和客户传统 ...
- 大华摄像头报警接口中图片加密,python调用c++方式实现解密
项目中,大华摄像头的报警信息,里面有图片地址,需要1天内取下来,保持留痕 可惜,图片下载后,加密了,大华提供了android,ios,c++例子,没有提供java解密例子 没办法,只好先用c++例子简 ...
随机推荐
- springbcloud5----高可用
package com.itmuch.cloud; import org.springframework.boot.SpringApplication; import org.springframew ...
- 在vue项目中使用codemirror插件实现代码编辑器功能(代码高亮显示及自动提示
在vue项目中使用codemirror插件实现代码编辑器功能(代码高亮显示及自动提示) 1.使用npm安装依赖 npm install --save codemirror; 2.在页面中放入如下代码 ...
- HttpWebRequest 返回BadRequest(400) 同时返回Response
今天用Fiddler分析安卓APP的一个登陆功能的时候,账号和密码错误会返回相应的消息,并且状态码是400. 正常用法: /// <summary> /// 读取返回的内容 /// < ...
- linq分析
例如: var sums = modellist .GroupBy(x => x.userId) .Select(group => new { Peo = group.Key, fist ...
- iis原理介绍
它是一个程序,负责对网站的内容进行管理,以及对客户的请求(就是Http请求)做出反应.当用户对一个页面提出请求时,IIS做如下反应(忽略权限):1.把对方请求的虚拟路径转换成物理路径2.根据物理路径搜 ...
- Linux各目录缩写含义
Unix已经有35年历史了.许多人认为它开始于中世纪,这个中世纪是相对于计算机技术的产生和发展来说的.在过去的时间里,Unix和它的子分支Linux收集有许多的历史和一些完全古老的语言.在这篇技巧文章 ...
- 浅谈web应用的负载均衡、集群、高可用(HA)解决方案
http://aokunsang.iteye.com/blog/2053719 声明:以下仅为个人的一些总结和随写,如有不对之处,还请看到的网友指出,以免误导. (详细的配置方案请google,这 ...
- Hive-0.13安装
Hive只需在使用节点安装即可. 1.上传tar包.解压 tar -zxvf apache-hive-0.13.0-bin.tar.gz -C /hadoop/ 配置HIVE_HOME环境变量 ...
- java开发中的诡异事件
1.Excel中的诡异'\r' 2.springMVC中参数莫名的不匹配 今天在使用springmvc测试一个controller方法一直访问失败,400错误,百思不得其解 先是问同事,然后一起讨论了 ...
- git介绍及常用命令
Git简介 linus 用C语言编写 2005年诞生 分布式版本管理系统 速度快,适合大规模,跨地区多人协同开发 分布式管理 Git 生态 Git 分布式版本管理系统 Gitlab git私库解决方案 ...