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. 孤荷凌寒自学python第八十天开始写Python的第一个爬虫10

    孤荷凌寒自学python第八十天开始写Python的第一个爬虫10 (完整学习过程屏幕记录视频地址在文末) 原计划今天应当可以解决读取所有页的目录并转而取出所有新闻的功能,不过由于学习时间不够,只是进 ...

  2. 如何实现iframe页面与父级页面js交互

    处理办法:1.同一域下,相同端口2.父级.子集页面上同时标记 document.domain = "xxx.com" 操作内部元素:1.jQuery使用 iframe.conten ...

  3. AC 自动机——多模式串匹配

    网站上的敏感词过滤是怎么实现的呢? 实际上,这些功能最基本的原理就是字符串匹配算法,也就是通过维护一个敏感词的字典,当用户输入一段文字内容后,通过字符串匹配算法来检查用户输入的内容是否包含敏感词. B ...

  4. 官方文档 恢复备份指南二 Getting Started with RMAN

    本章对RMAN进行基本的熟悉和了解   1.Overview of the RMAN Environment    RMAN运行时需要的最小环境:      target database       ...

  5. 文件操作---基于python

    # coding:utf-8from time import sleepimport sysreload(sys)sys.setdefaultencoding("utf8")f=o ...

  6. Python中的list

    list的创建 1 字面量 >>>L = [1, 2, 3] [1, 2, 3] 2 通过iterable可迭代对象,比如str对象,range对象,map对象 >>&g ...

  7. Thunder团队第六周 - Scrum会议4

    Scrum会议4 小组名称:Thunder 项目名称:i阅app Scrum Master:胡佑蓉 工作照片: 苗威同学在拍照,所以不在照片内. 参会成员: 王航:http://www.cnblogs ...

  8. windows编程了解

    文章:浅谈Windows API编程 (这个经典)

  9. iOS-JS调用OC代码

    监听时间点击 改变当前浏览器窗口地址 在js里调用OC代码,需要在网页上写一个协议,不是http协议 然后在OC的webView shouldStartloadWithRequest

  10. PAT 1052 卖个萌

    https://pintia.cn/problem-sets/994805260223102976/problems/994805273883951104 萌萌哒表情符号通常由“手”.“眼”.“口”三 ...