遇见Flask-Script
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相关推荐
- flask mysql 1366_2017-11-17 Python Flask Script+mysql环境设置
[1.初级版] flask-scrpit安装. 使用flask-scrpit可以创建命令,并在Flask的应用上下文中执行,因为这样才能对Flask对象进行修改.Flask Script自带了一些默认 ...
- Flask 第三方组件之 script
Flask Script扩展提供向Flask插入外部脚本的功能,包括运行一个开发用的服务器,一个定制的Python shell,设置数据库的脚本,cronjobs,及其他运行在web应用之外的命令行任 ...
- flask url构建_如何为生产构建构建Flask-RESTPlus Web服务
flask url构建 by Greg Obinna 由格雷格·奥比纳(Greg Obinna) 如何为生产构建构建Flask-RESTPlus Web服务 (How to structure a F ...
- python框架实例_Python之Flask框架项目Demo入门
Flask是微型web框架,框架本身十分精简,微型并不代表其功能弱,核心代码基于Werkzeug, Jinja 2 这两个库,它以插件形式的进行功能扩展,且插件易于安装与使用,并且可以自行开发扩展插件 ...
- 用 Flask 来写个轻博客 (6) — (M)VC_models 的关系(one to many)
Blog 项目源码:https://github.com/JmilkFan/JmilkFan-s-Blog 目录 目录 前文列表 扩展阅读 前言 一对多 再一次 sync db How to use ...
- 用 Flask 来写个轻博客 (4) — (M)VC_创建数据模型和表
Blog 项目源码:https://github.com/JmilkFan/JmilkFan-s-Blog 目录 目录 前文列表 扩展阅读 定义数据模型 models 创建表 前文列表 用 Flask ...
- 用 Flask 来写个轻博客 (2) — Hello World!
Blog 项目源码:https://github.com/JmilkFan/JmilkFan-s-Blog 目录 目录 前文列表 扩展阅读 实现最简单的 Flask 应用 创建 config.py 文 ...
- Flask 实战:如何从零开发“知乎”
作为当下十分火热的问答社区,知乎聚集了大量问题者和答题者. 但不少朋友在逛知乎的同时,也不禁想要开发一个像"知乎"这样的问答社区,既能够问题答题,也能拥有用户评论.点赞.收藏.浏览 ...
- flask web开发是前端还是后端_Flask Web开发实战:入门、进阶与原理解析 PDF 全格式版...
给大家带来的一篇关于Flask相关的电子书资源,介绍了关于Flask.Web.开发实战方面的内容,本书是由机械工业出版社出版,格式为PDF,资源大小12.2M,李辉编写,目前豆瓣.亚马逊.当当.京东等 ...
- Python3 Flask框架
Flask框架 内容原创,侵权必究.学习分享请注明地址:https://blog.csdn.net/Jackie_ZHF/article/details/82592928 博主有时间会不定期更新大数据 ...
最新文章
- 不少Java程序员都觉得Lambda表达式很鸡肋,它到底有何用呢?
- R语言:计算各种距离
- 图形推理1000题pdf_笔试|图形推理题满分攻略
- [团队项目]后续安排 Github
- api 请求 fail_谈一谈定位api的使用
- php 判断两个数组差集,php array_udiff_assoc 计算两个数组的差集实例
- 对hash签名失败_vue项目中微信jssdk在ios签名失败
- 云 文件 服务器 只存,云 文件 服务器只存
- 自动安装虚拟机之网络安装和pxe安装
- 【C语言】指针进阶实践(指针数组和创建单链表)
- 基于simulink的光伏电站仿真_基于 Carsim 2016 和 Simulink的无人车运动控制联合仿真(二)...
- 根据线性递推的DP公式如何写出变换矩阵
- 湖南工商大学计算机网络原理,李小龙(湖南工商大学计算机与信息工程学院副院长)_百度百科...
- Bzoj2124(p5364): 等差子序列
- cad新手必练300图_CAD建筑图纸看不懂?最简单识图方法都在这,收藏记得看
- 初中数学计算机图片,初中数学课件背景图片大全.doc
- ggggxc学习笔记---C语言代码I
- Android高手笔记 - IO优化
- OMAP3530资料
- 最基础的postman入门简单使用教程