ubuntu下使用Flask插件Flask-script

本文详细介绍了 Flask-Script 的使用方法,包括安装步骤、基本示例和三种创建命令的方式:使用 Manager 类、Command 类及 add_command 方法、@command 和 @option 装饰器。此外还介绍了如何获取用户输入、设置默认命令等高级功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

写在前面

Flask从0.11版本开始,内置了CLI工具,用来替代flask,写这篇文章的目的在于flask狗书中使用的是flask,之前所写的代码都是用的flask-script。之后出于考虑,我会使用flask.cli来操作flask项目。
(ps:不知道怎么描述flask-script的作用QAQ,用操作这个词好像不贴切。文档原文:The Flask-Script extension provides support for writing external scripts in Flask.大概意思是在外部的shell中运行,修改flask项目)

安装

pip3 install flask-script

一个简单的例子

#filename:manage.py
from flask_script import Manager
from flask import Flask

app = Flask(__name__)
manager = Manager(app)

@manager.command
def hello():
    print("hello")

if __name__ == '__main__':
    manager.run()
在ubuntu下执行:
>>>python3 manage.py hello
输出:
>>>hello         

使用Manager类实例的装饰器command,编写你所需要的功能的函数,运行,命令行参数的名字将和你所编写的函数名一致。Manager类接收一个Flask类实例,或者一个能返回Flask类实例的函数或者callable,方便使用工厂模式。manager.run()使得Mangager实例接收命令行的输入。

3种建立命令的方法

使用Command类及add_command()方法
from flask_script import Command, Manager
from flask import Flask

app = Flask(__name__)
manager = Manager(app)

class Hello(Command):
    "you can see me if you do not pass the argument."
    def run(self):
        print("hello this is a command that use Command class")


manager.add_command('hello', Hello())

if __name__ == '__main__':
    manager.run()
在ubuntu下执行:
>>>python3 manage.py hello
输出:
>>>hello this is a command that use Command class

这种方法继承Command类,且必须实现run()方法,并且将hello命令通过函数add_command()加入到manager中。除了使用add_command()函数外,还可以直接manager.run({'hello':Hello()})。有一点值得注意的是,在自己编写的Hello类中,添加这个类的docstring后,在ubuntu中输入python3 manage.py获取所有的命令行参数,将在hello后面显示你所编写的这句docstring。

使用@command装饰器
from flask import Flask
from flask_script import Manager

app = Flask(__name__)
manager = Manager(app)

@manager.command
def hello():
    "this is a docstring that use @command decorator"
    print("hello that use @command decorator")

if __name__ == "__main__":
    manager.run()
在ubuntu中输入:
>>>python3 manage.py hello
输出:
>>>hello that use @command decorator
使用@option装饰器
单个命令选项
from flask import Flask
from flask_script import Manager

app = Flask(__name__)
manager = Manager(app)

@manager.option('-n', '--name', help='Your name')
def hello(name):
    "hello that use @option decorator"
    print("hello, %s" % name)

if __name__ == '__main__':
    manager.run()
在ubuntu中输入:
>>>python3 manage.py hello -n lrh
输出:
>>>hello, lrh
多个命令选项的情况:
#filename: manage.py
from flask import Flask
from flask_script import Manager

app = Flask(__name__)
manager = Manager(app)

@manager.option('-n', '--name', dest='name', default='lrh')
@manager.option('-u', '--url', dest='url', default=None)
def hello(name, url):
    if url is None:
        print("hello, %s" % name)
    else:
        print("hello, %s from %s" % (name, url))


if __name__ == '__main__':
    manager.run()
使用方法:
>>>python3 manage.py hello -n lrh -u www.baidu.com
>>>hello, lrh from www.baidu.com #注释:输出1,使用了选项-n, -u 
>>>python3 manage.py hello -n lrh
>>>hello, lrh            #注释:输出2,使用选项-n
>>>python3 manage.py hello --name=lrh --url=www.baidu.com
>>>hello, lrh from www.baidu.com #注释:和输出1相同

获取用户输入

#filename: manage.py
from flask import Flask
from flask_script import Manager, prompt_bool


app = Flask(__name__)
manager = Manager(app)

@manager.command
def test():
    if prompt_bool('Are you sure you want to print hello?'):
        print('hello')
    else:
        print('your input is no')
if __name__ == '__main__':
    manager.run()
>>>python3 manage.py hello
Are you sure you want to print hello?[n] #注释:输出语句,输入y或者n选择
>>>y
hello                      #注释:输入y输出hello

默认命令

Flask-scipt有shell和runserver这两个命令,我们也可以定制自己的命令

from flask import Flask
from flask_script import Manager, Shell, Server

app = Flask(__name__)
manager = Manager(app)

def _make_context():
    return dict(app=app)

manager.add_command('server', Server(port=8080))   #更改默认端口5000为8080
manager.add_command('shell', Shell(make_context=_make_context))

if __name__ == '__main__':
    manager.run()

上述代码把原来的运行命令runserver改成了server,shell命令启动了一个pyton shell,可以传入参数make_context,这个参数返回一个字典,默认情况下返回flask实例,可以添加更多的键值对,减少import,如在_make_context函数中,更改为return dict(app=app, db=db, models=models),将使用shell时用到的db和models添加到shell的上下文中,这样就无需在运行shell后,一条一条的import。

flask-script文档:点击链接

### 配置 Python 开发环境 在 Ubuntu 系统中配置 Python 开发环境是一项基础而重要的任务,以下是详细的说明: #### 1. 检查已安装的 Python 版本 Ubuntu 默认通常会预装 Python。可以通过以下命令检查当前系统的 Python 版本: ```bash python3 --version ``` 如果未找到 `python3` 命令,则可能需要手动安装。 #### 2. 更新系统软件包 为了确保安装最新版本的依赖项,在开始之前先更新系统软件包列表: ```bash sudo apt update && sudo apt upgrade -y ``` #### 3. 安装 Python 和必要工具 可以使用 APT 包管理器来安装 Python 及其相关工具: ```bash sudo apt install python3 python3-pip python3-venv -y ``` 上述命令将安装 Python 解释器、pip 工具以及用于创建虚拟环境的支持模块[^1]。 #### 4. 创建和激活虚拟环境 推荐为每个项目单独创建一个虚拟环境,以便隔离不同项目的依赖关系。具体操作如下: ```bash python3 -m venv myproject_env source myproject_env/bin/activate ``` 当虚拟环境被激活时,终端提示符前会出现 `(myproject_env)` 的标志,表示当前工作目录处于该虚拟环境中[^2]。 #### 5. 使用 pip 管理依赖项 Pip 是 Python 的官方包管理工具,可用于安装第三方库。例如,要安装 Flask Web 框架,可运行以下命令: ```bash pip install flask ``` 为了避免网络延迟或访问受限的情况,建议配置国内镜像源作为 pip 的默认下载地址。编辑或新建文件 `~/.pip/pip.conf` 并添加以下内容: ```ini [global] index-url = https://pypi.tuna.tsinghua.edu.cn/simple ``` #### 6. 编写并运行 Python 脚本 在一个简单的文本编辑器(如 nano 或 VS Code)中编写 Python 文件后,可通过以下方式运行它: ```bash python3 script.py ``` #### 7. 安装集成开发环境 (IDE) 对于更复杂的开发需求,可以选择安装专业的 IDE 来提高效率。PyCharm 是一款流行的 Python IDE,支持多种插件扩展功能。安装方法如下: ```bash sudo snap install pycharm-community --classic ``` 启动 PyCharm 后按照向导完成初始设置即可开始新项目[^3]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值