前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[737]flask之flask-script

[737]flask之flask-script

作者头像
周小董
发布2020-01-13 17:42:30
4530
发布2020-01-13 17:42:30
举报
文章被收录于专栏:python前行者python前行者

Flask-Scropt插件为在Flask里编写额外的脚本提供了支持。这包括运行一个开发服务器,一个定制的Python命令行,用于执行初始化数据库、定时任务和其他属于web应用之外的命令行任务的脚本。

代码语言:javascript
复制
pip install flask
pip install Flask-Script

第一步:实例化manage对象

需要创建一个可以运行你脚本命令的Python模块。你可以随意命名它。我这里就以manage.py为例。

在manage.py文件中,需要先创建一个Manager实例。Manager类会跟踪所有的命令和命令行调用的参数:

代码语言:javascript
复制
from flask import Flask
from flask_script import Manager
 
app = Flask(__name__)
# configure your app
app.debug = True

manager = Manager(app)
 
if __name__ == "__main__":
    manager.run()

调用manager.run()方法初始化Mnager实例来接收命令行输入。

此时,已经可以通过命令启动项目了,如下:

代码语言:javascript
复制
python manage.py runserver

项目会以:Running on http://127.0.0.1:5000/ 的方式启动,

如需指定ip和端口:

代码语言:javascript
复制
python manage.py runserver -h 127.0.0.1 -p 8090

项目则会以:Running on http://127.0.0.1:8090/ 的方式启动,其实也是可以指定IP的,只是本质也是127.0.0.1

代码语言:javascript
复制
python manager.py runserver -h 地址 -p 端口 -d -r

其中:-h表示地址。-p表示端口。-d表示debug模式。-r表示自动重启

第二步:创建添加自定义命令

创建自定义命令有三种方法:

  • 定义Command类的子类
  • 使用@command装饰器
  • 使用@option装饰器

(1) 定义Command类的子类

为了简单,我们就创建一个hello命令来输出“hello world”:

代码语言:javascript
复制
from flask_script import Command
 
class Hello(Command):
    "prints hello world"
 
    def run(self):
        print "hello world"

接下来我们需要把命令添加到Mannager实例:

代码语言:javascript
复制
manager.add_command('hello', Hello())

完整代码如下:

代码语言:javascript
复制
from flask_script import Manager,Command
from flask import Flask
app = Flask(__name__)
 
manager = Manager(app)
 
class hello(Command):
    "prints hello world"
    def run(self):
        print("hello world")
 
manager.add_command('hello', hello())
 
if __name__ == "__main__":
    manager.run()

使用:

代码语言:javascript
复制
在命令行运行如下命令:
(1)$python manage.py hello
hello world
(2)$python manage.py
usage: manage.py [-?] {hello,shell,runserver} ...
 
positional arguments:
  {hello,shell,runserver}
    hello               prints hello world
    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

也可以通过把包含Command实例的字典作为manager.run()的参数:
manager.run({'hello' : Hello()})

(2)使用@command装饰器

对于简单的命令,我们可以使用属于Manager实例的@command装饰器。

代码语言:javascript
复制
@manager.command
def hello():
    "Just say hello"
    print("hello")

其使用方法和前面一样。

(3)使用@option装饰器

如何需要通过命令行进行比较复杂的控制,可以使用Manager实例的@option装饰器。

代码语言:javascript
复制
@manager.option('-n', '--name', help='Your name')
def hello(name):
    print("hello", name)

使用

代码语言:javascript
复制
python manage.py -n '123'

则会输出:‘hello 123’

参考:https://www.cnblogs.com/jiangchunsheng/p/9218340.html

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-12-22 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 第一步:实例化manage对象
  • 第二步:创建添加自定义命令
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档