Flask_脚本

Flask_脚本

1 集成Python shell

在我们实际的开发中,不免有一些任务需要在shell下完成。比如为cms后台添加超级管理员的需求,又比如迁移数据库的需求,定时任务等等,诸如这类需求更适合在shell中去操作(大部分需要在shell中去操作的都是权限比较高的任务)。


提示:迁移数据库就是用来解决数据库更新问题,解决之前我们学的db.create_all()db.drop_all()更新数据库的时候丢失数据的问题。

flask官方提供了一个扩展组件flask-script可以实现在shell下操作我们的Flask项目。

1.1 flask-script的用法:

1 由于flask-script是Flask的一个扩展组件,同往常一样首先在虚拟环境中安装我们的flask_script包。

pip install flask-script    

1.1.1 实例:flask-script的简单实现

提示:实例下面有讲解

项目目录

│  manage.py
│  server.py
│
├─static  # 文件夹
├─templates # 文件夹

server.py

from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello World!'

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

manage.py

from flask_script import Manager
from server import app

manager = Manager(app)

@manager.command
def hello():
    print('hello world')

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

解读:manage.py

(1)flask_script模块中导入flask_script的核心类Manager

from flask_script import Manager 

(2)server.py模块中把app对象导入

from server import app

(3)Manager()类传入app对象实例化出manager对象,manager对象用于以后所有添加命令相关操作

manager = Manager(app)

(4)利用@manager.command装饰器添加以被装饰函数的名字命名的一条命令被装饰函数的映射

@manager.command   # 相当于添加了一条hello命令,可以调用到hello函数
def hello():
    print('hello world')

(5)manager调用run方法之前定义的命令才会生效

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

shell下操作命令

shell中切入到该manage.py的目录下,并且进入虚拟环境。输入命令python manage.py hello

>>python manage.py hello

命令中的hello@manager.command装饰器装饰的函数名

执行命令后会调用hello函数

如图所示实现了调用hello函数

1.1.1命令添加方式:

第一种(无参命令):

使用manager.commad方式添加命令:

...
@manager.command
def demo():
    print('无参命令')
...

切入到manage.py所在的目录中,切入到虚拟环境,执行如下命令

>>python manage.py demo

第二种(有参命令):

使用manager.option('-简写的命令',‘--全写的命令’,dest=‘传给函数的形参’)添加命令:

...
@manager.option("-u","--username",dest="username")
@manager.option("-p","--password",dest="password")
def login(username, password):
    print("用户名:{}  密码: {}".format(username,password))
...

切入到manage.py所在的目录中,切入到虚拟环境,执行如下命令.

>>python manage.py login -u mark -p 123

第三种(子命令):

比如一个功能对应着很多个命令,这个时候就可以用子命令来实现,可以将这些命令的映射单独放到一个文件方便管理。在这个放着很多命令映射的文件中实例化Manager类出一个新的对象,并在manage.py文件中通过manager.add_command("子命令",Manager对象)来添加子命令

实例:

在之前的1.1.1实例的项目目录中新建文件db_script.py

联系管理员微信tutu19192010,注册账号

上一篇
下一篇
Copyright © 2022 Egon的技术星球 egonlin.com 版权所有 帮助IT小伙伴学到真正的技术