Flask-Script是Flask的命令行扩展包,使用它可以通过命令行的形式操作Flask项目, 例如,可通过命令启动一个发版本的服务器,设置数据库和定时任务等。

类似Django的manage.py提供的命令,不同的是使用flask-script可以自定义更多的命令。

Install flask-script

一般在虚拟环境中安装

(flask_env) mark@ocarina:~/PycharmProjects/flask_one$ pip install flask-script
Collecting flask-script
Downloading https://files.pythonhosted.org/packages/00/a4/cd587b2b19f043b65bf33ceda2f6e4e6cdbd0ce18d01a52b9559781b1da6/Flask-Script-2.0.6.tar.gz (43kB)
100% |████████████████████████████████| 51kB 229kB/s
Requirement already satisfied: Flask in /home/mark/.virtualenvs/flask_env/lib/python3.6/site-packages (from flask-script) (1.0.2)
Requirement already satisfied: Werkzeug>=0.14 in /home/mark/.virtualenvs/flask_env/lib/python3.6/site-packages (from Flask->flask-script) (0.14.1)
Requirement already satisfied: itsdangerous>=0.24 in /home/mark/.virtualenvs/flask_env/lib/python3.6/site-packages (from Flask->flask-script) (1.1.0)
Requirement already satisfied: click>=5.1 in /home/mark/.virtualenvs/flask_env/lib/python3.6/site-packages (from Flask->flask-script) (7.0)
Requirement already satisfied: Jinja2>=2.10 in /home/mark/.virtualenvs/flask_env/lib/python3.6/site-packages (from Flask->flask-script) (2.10)
Requirement already satisfied: MarkupSafe>=0.23 in /home/mark/.virtualenvs/flask_env/lib/python3.6/site-packages (from Jinja2>=2.10->Flask->flask-script) (1.1.0)
Building wheels for collected packages: flask-script
Running setup.py bdist_wheel for flask-script ... done
Stored in directory: /home/mark/.cache/pip/wheels/1c/17/70/4598e6dba4bec58c1b59552c6409272aea31978ab8159f11a1
Successfully built flask-script
Installing collected packages: flask-script
Successfully installed flask-script-2.0.6
(flask_env) mark@ocarina:~/PycharmProjects/flask_one$

使用flask-script

安装好了,不会用,怎么办?

在pycharm中点flask_script想进去看看,结果只进入了__init__.py中,看到如下内容:

class Manager(object):
"""
Controller class for handling a set of commands. Typical usage:: class Print(Command): def run(self):
print "hello" app = Flask(__name__) manager = Manager(app)
manager.add_command("print", Print()) if __name__ == "__main__":
manager.run() On command line:: python manage.py print
> hello :param app: Flask instance, or callable returning a Flask instance.
:param with_default_commands: load commands **runserver** and **shell**
by default.
:param disable_argcomplete: disable automatic loading of argcomplete. """

使用方式一

导入flask_script中的Manager,Command

自定义的命令需要在Command的子类中重写run方法,在此方法中定义命令需要做什么事

实例化Manager(可以接收一个Flask对象作为参数),调用Manager对象的add_command('命令', 自定义命令类实例)

from flask_script import Manager, Command
from app import app # Flask对象 class TestCommand(Command):
"""
测试命令
""" def run(self): # 重写Command的run方法
# 使用命令在控制台输出信息
print("server run on xxx:80...") manager = Manager(app) # 将flask_script与Flask联系起来
manager.add_command('test', TestCommand()) if __name__ == '__main__':
manager.run()

在manage.py中执行manage.run()可以查看这个manage中包含的命令详情

/home/mark/.virtualenvs/flask_env/bin/python3.6 /home/mark/PycharmProjects/flask_one/manage.py
usage: manage.py [-?] {test,shell,runserver} ... positional arguments:
{test,shell,runserver}
test 测试命令
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 Process finished with exit code 2

在命令行执行python manage.py test

(flask_env) mark@ocarina:~/PycharmProjects/flask_one$ python manage.py test
server run on xxx:80...

使用方式二

导入flask_script中的Manager,实例化之后使用@manager.command装饰器装饰一个函数,这样,这个函数名就成为一个命令,函数中的代码会在执行这个命令后执行。

from flask_script import Manager
from app import app manager = Manager(app) @manager.command
def music():
"""
小妞,给爷唱一个
"""
print("客官不可以,不可以摸我那里....") if __name__ == '__main__':
manager.run()

使用manager.run()查看

/home/mark/PycharmProjects/flask_one/manage.py
usage: manage.py [-?] {music,shell,runserver} ... positional arguments:
{music,shell,runserver}
music 小妞,给爷唱一个
shell Runs a Python shell inside Flask application context.
runserver Runs the Flask development server i.e. app.run()

在命令行执行python manage.py music

(flask_env) mark@ocarina:~/PycharmProjects/flask_one$ python manage.py music
客官不可以,不可以摸我那里....

使用方式三

将命令定义在其他模块中,再引入到manage.py,将manage.py作为主命令模块。

from flask_script import Manager

# 不作为主命令模块,也就是说命令行是python manage.py xxx..
# 使用manage.py 而不是当前模块,这里的Manager()就不用传如Flask对象了
db_manager = Manager() @db_manager.command
def migrate():
"""
数据迁移命令
"""
print("执行数据迁移...")

在manage.py中的引入方式:manger.add_command('prefix',manager对象)

from flask_script import Manager
from app import app
from db_manager import db_manager manager = Manager(app) # db是前缀 执行命令方式 python manage.py db migrate
manager.add_command('db', db_manager) if __name__ == '__main__':
manager.run()

执行结果:

(flask_env) mark@ocarina:~/PycharmProjects/flask_one$ python manage.py db migrate
执行数据迁移...

其他使用方式

可以使用manger.option()装饰器

命令函数可以接收参数

弹出确认操作:

@db_manager.command
def drop_data():
if prompt_bool("你真的要删除这些数据吗?后果自负哦..\t\n"
"输入y删除,n取消"):
print('数据已删除...')
else:
print("就知道你不敢")
----------------------------------------
(flask_env) mark@ocarina:~/PycharmProjects/flask_one$ python manage.py db drop_data
你真的要删除这些数据吗?后果自负哦..
输入y删除,n取消 [n]: n
就知道你不敢
(flask_env) mark@ocarina:~/PycharmProjects/flask_one$

最后

更详细的资料在官方文档。

遇见Flask-Script的更多相关文章

  1. flask+script命令行交互工具

    Project name :Flask_Plan templates:templates static:static 首先说,我们flask比django方便的地方是所有的模块都可以自己选,你不喜欢s ...

  2. Flask script 内的Shell 类 使用

    1.集成Python shell 每次自动shell会话都要导入数据库实例和模型,很烦人.为了避免一直重复导入,我们可以做些配置让Flask-Script的Shell命令自动导入特定的对象.若想把对象 ...

  3. Flask deployment on gunicorn with flask script

    https://stackoverflow.com/questions/34265870/flask-deployment-on-gunicorn-with-flask-script 依赖 Flask ...

  4. Flask + WSGI + Nginx 云部署

    这几天学着用flask写一些rest api,然后部署到云上.这个过程虽然网上有很多的教程,但还是遇到不少的问题! 采用flask的原因是因为它比较容易上手吧.用flask有专门restful api ...

  5. 阿里云部署 Flask + WSGI + Nginx 详解

    抵不住朋友的诱惑,今天终于入手了一台阿里云服务器,是Ubuntu 1.4 32位版本,最初考虑是用来尝尝鲜只是买了个最低配的,价格算起来与在国外买个空间的价格相当吧(可能一年才贵100多),但用起来感 ...

  6. 8、flask之flask-script组件

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

  7. Flask组件

    组件踩坑记录 : 先注册组件在使用配置(...) flask-script Flask Script扩展提供向Flask插入外部脚本的功能,包括运行一个开发用的服务器,一个定制的Python shel ...

  8. flask之flask-script组件

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

  9. 细说flask数据库迁移

    什么情况下要用数据库迁移? 在开发过程中,需要修改数据库模型,而且还要在修改之后更新数据库.最直接的方式就是删除旧表,但这样会丢失数据. 更好的解决办法是使用数据库迁移框架,它可以追踪数据库模式的变化 ...

  10. python 全栈开发,Day142(flask标准目录结构, flask使用SQLAlchemy,flask离线脚本,flask多app应用,flask-script,flask-migrate,pipreqs)

    昨日内容回顾 1. 简述flask上下文管理 - threading.local - 偏函数 - 栈 2. 原生SQL和ORM有什么优缺点? 开发效率: ORM > 原生SQL 执行效率: 原生 ...

随机推荐

  1. JVM监控远程服务器

    1. 首先配置服务器端,进入服务器tomcat的bin目录下,打开catalina.sh配置文件,xxx为服务器配置路径. # cd /xxx/apache-tomcat-/bin # vim cat ...

  2. EditorGUI控件输入监听

    EditorGUI控件输入监听 在做编辑器开放的过程中,有时候要对用户输入进行判断和限制,但EditorGUI控件却没有触发回调,而是提供了一种麻烦的办法--使用EditorGUI.BeginChan ...

  3. [C++]STL中的容器

    C++11 STL中的容器 一.顺序容器: vector:可变大小数组: deque:双端队列: list:双向链表: forward_list:单向链表: array:固定大小数组: string: ...

  4. Java学习 · 初识 异常机制

    异常机制 1.   程序中的异常 a)     b)    面对异常如何解决 i.           由开发者通过if-else来解决 代码臃肿 程序员需要花费很大精力 ii.           ...

  5. Python-3.6 安装pycrypto 2.6

    最近接触公司后台管理系统的开发,其中涉及到加密模块pycrypto. 重点来了!!!!敲黑板!!!! pycrypto在PyCharm中跟其他的模块不一样,pip install pycrypto安装 ...

  6. Hbase restFul API

    获取hbase版本 curl -vi -X GET -H "Accept: text/xml" http://10.8.4.46:20550/version/cluster1.2. ...

  7. [Clr via C#读书笔记]Cp12泛型

    Cp12泛型 Generic: 特点 源代码保护 类型安全 清晰代码 更佳性能 Framework中的泛型 System.Collections.Generic; 开放类型,封闭类型:每个封闭类型都有 ...

  8. python 打包

    一.下载 pip install Pyinstaller 二.使用Pyinstaller 1.使用下载安装的方式安装的Pyinstaller打包方式 将需要打包的文件放在解压得到的Pyinstalle ...

  9. smartgit 使用

    合并分支

  10. Android 网络编程 API笔记 - java.net 包 权限 地址 套接字 相关类 简介

    Android 网络编程相关的包 : 9 包, 20 接口, 103 类, 6 枚举, 14异常; -- Java包 : java.net 包 (6接口, 34类, 2枚举, 12异常); -- An ...