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-scriptDownloading 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-scriptRunning setup.py bdist_wheel for flask-script ... doneStored 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 exitProcess 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 appmanager = 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_managermanager = 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$

最后

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

转载于:https://www.cnblogs.com/endurance9/p/10192075.html

遇见Flask-Script相关推荐

  1. flask mysql 1366_2017-11-17 Python Flask Script+mysql环境设置

    [1.初级版] flask-scrpit安装. 使用flask-scrpit可以创建命令,并在Flask的应用上下文中执行,因为这样才能对Flask对象进行修改.Flask Script自带了一些默认 ...

  2. Flask 第三方组件之 script

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

  3. flask url构建_如何为生产构建构建Flask-RESTPlus Web服务

    flask url构建 by Greg Obinna 由格雷格·奥比纳(Greg Obinna) 如何为生产构建构建Flask-RESTPlus Web服务 (How to structure a F ...

  4. python框架实例_Python之Flask框架项目Demo入门

    Flask是微型web框架,框架本身十分精简,微型并不代表其功能弱,核心代码基于Werkzeug, Jinja 2 这两个库,它以插件形式的进行功能扩展,且插件易于安装与使用,并且可以自行开发扩展插件 ...

  5. 用 Flask 来写个轻博客 (6) — (M)VC_models 的关系(one to many)

    Blog 项目源码:https://github.com/JmilkFan/JmilkFan-s-Blog 目录 目录 前文列表 扩展阅读 前言 一对多 再一次 sync db How to use ...

  6. 用 Flask 来写个轻博客 (4) — (M)VC_创建数据模型和表

    Blog 项目源码:https://github.com/JmilkFan/JmilkFan-s-Blog 目录 目录 前文列表 扩展阅读 定义数据模型 models 创建表 前文列表 用 Flask ...

  7. 用 Flask 来写个轻博客 (2) — Hello World!

    Blog 项目源码:https://github.com/JmilkFan/JmilkFan-s-Blog 目录 目录 前文列表 扩展阅读 实现最简单的 Flask 应用 创建 config.py 文 ...

  8. Flask 实战:如何从零开发“知乎”

    作为当下十分火热的问答社区,知乎聚集了大量问题者和答题者. 但不少朋友在逛知乎的同时,也不禁想要开发一个像"知乎"这样的问答社区,既能够问题答题,也能拥有用户评论.点赞.收藏.浏览 ...

  9. flask web开发是前端还是后端_Flask Web开发实战:入门、进阶与原理解析 PDF 全格式版...

    给大家带来的一篇关于Flask相关的电子书资源,介绍了关于Flask.Web.开发实战方面的内容,本书是由机械工业出版社出版,格式为PDF,资源大小12.2M,李辉编写,目前豆瓣.亚马逊.当当.京东等 ...

  10. Python3 Flask框架

    Flask框架 内容原创,侵权必究.学习分享请注明地址:https://blog.csdn.net/Jackie_ZHF/article/details/82592928 博主有时间会不定期更新大数据 ...

最新文章

  1. 不少Java程序员都觉得Lambda表达式很鸡肋,它到底有何用呢?
  2. R语言:计算各种距离
  3. 图形推理1000题pdf_笔试|图形推理题满分攻略
  4. [团队项目]后续安排 Github
  5. api 请求 fail_谈一谈定位api的使用
  6. php 判断两个数组差集,php array_udiff_assoc 计算两个数组的差集实例
  7. 对hash签名失败_vue项目中微信jssdk在ios签名失败
  8. 云 文件 服务器 只存,云 文件 服务器只存
  9. 自动安装虚拟机之网络安装和pxe安装
  10. 【C语言】指针进阶实践(指针数组和创建单链表)
  11. 基于simulink的光伏电站仿真_基于 Carsim 2016 和 Simulink的无人车运动控制联合仿真(二)...
  12. 根据线性递推的DP公式如何写出变换矩阵
  13. 湖南工商大学计算机网络原理,李小龙(湖南工商大学计算机与信息工程学院副院长)_百度百科...
  14. Bzoj2124(p5364): 等差子序列
  15. cad新手必练300图_CAD建筑图纸看不懂?最简单识图方法都在这,收藏记得看
  16. 初中数学计算机图片,初中数学课件背景图片大全.doc
  17. ggggxc学习笔记---C语言代码I
  18. Android高手笔记 - IO优化
  19. OMAP3530资料
  20. 最基础的postman入门简单使用教程

热门文章

  1. 本周小结!(回溯算法系列三)
  2. 如何在 Mac 上的“地图”中自定地图视图?
  3. LINUX 下安装git
  4. 8Manage轻松解决采购过程“脏乱差”问题
  5. MySQL Performance Schema
  6. 实战 | 使用Slack、Docker来打造你的运维机器人
  7. 最小化JavaScript代码
  8. Java经典设计模式 总览
  9. 华为的IPsec ×××主模式(MAIN mode)
  10. 修改MFC标题栏上的图标和修改MFC窗口标题(转)