【12.0】Flask框架之flask-script

发布时间 2023-08-26 21:47:26作者: Chimengmeng

【一】Django中的命令

【1】引入

  • django中,有命令
    • python manage.py runserver
      • 这个命令用于启动Django开发服务器,让我们能够在本地运行我们的应用程序。
      • 它会默认在本地的8000端口上启动服务器,我们可以在浏览器中访问 http://localhost:8000 来查看应用程序。
    • python manage.py makemigrations
      • 这个命令用于生成数据库迁移文件,当我们修改了模型(Models)的结构时,需要运行这个命令来更新数据库。
      • 它会根据模型的改动生成相应的迁移文件,我们稍后可以通过运行 python manage.py migrate 来应用这些迁移,使数据库保持与模型同步。
  • 自定制命令(django如何自定制命令)
    • python manage.py init_db excel文件路径 指定表名

【2】自定义自己的命令

  • 除了这些内置的命令,我们还可以自定义自己的命令来满足项目的特殊需求。
  • 下面是一个自定义命令的示例演示如何初始化数据库表格:
# myapp/management/commands/init_db.py

from django.core.management.base import BaseCommand
from myapp.models import MyModel
import pandas as pd


class Command(BaseCommand):
    help = 'Initialize database table from excel file'

    def add_arguments(self, parser):
        parser.add_argument('file_path', type=str, help='Path to the excel file')
        parser.add_argument('table_name', type=str, help='Name of the table')

    def handle(self, *args, **options):
        file_path = options['file_path']
        table_name = options['table_name']

        # 读取Excel文件
        data = pd.read_excel(file_path)
        
        # 将数据导入数据库表格
        for index, row in data.iterrows():
            MyModel.objects.create(name=row['name'], age=row['age'], table=table_name)
  • 在上面的示例中,我们创建了一个名为init_db的命令,它接受两个参数:excel文件路径指定表名

    • handle方法中,我们首先使用pandas库读取Excel文件的数据,然后将数据逐行导入到名为MyModel的模型对应的数据库表格中。
  • 要使用自定义命令,我们需要确保将命令所在的应用程序添加到项目的INSTALLED_APPS设置中,并确保命令文件位于应用程序的management/commands目录下。

  • 使用该自定义命令的示例命令行执行方式为:

python manage.py init_db path/to/excel/file.xlsx tablename
  • 其中path/to/excel/file.xlsx是Excel文件的路径,tablename是要导入数据的表名。

  • 这样,我们就可以通过自定义命令来根据特定的需求扩展Django的功能,并实现更多定制化的操作。

【二】flask命令启动

【1】引入

  • flask启动项目,像djagno一样,通过命令启动
pip install Flask==2.2.2
pip install Flask_Script==2.0.3

【2】借助于:flask-script 实现

【1】安装

pip3.8 install flask-script

【2】修改代码

from flask_script import Manager
manager=Manager(app)
manager.run()

【3】用命令启动

(1)常规命令启动

python manage.py runserver

(2)自定制命令

  • 简单自定制命令
@manager.command
def custom(arg):
    # 命令的代码,比如:初始化数据库, 有个excel表格,使用命令导入到mysql中
    print(arg)
  • 复杂一些的自定制命令
@manager.option('-n', '--name', dest='name')
@manager.option('-u', '--url', dest='url')
def cmd(name, url):
    print(name, url)

【三】命令启动演示

【1】主程序代码

  • manage.py
from flask import Flask, render_template
from flask_script import Manager

app = Flask(__name__, template_folder='templates')
app.debug = True
manager = Manager(app)


@app.route('/', methods=['GET', 'POST'])
def index():
    return render_template('index.html')


if __name__ == '__main__':
    manager.run()
  • templates/index.html
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        <h1>index页面</h1>
    </body>
</html>

【2】简单启动命令

  • 在当前manage.py的文件路径下
python manage.py runserver

【3】自定制简单启动命令

from flask import Flask, render_template
from flask_script import Manager

app = Flask(__name__, template_folder='templates')
app.debug = True
manager = Manager(app)


@app.route('/', methods=['GET', 'POST'])
def index():
    return render_template('index.html')


@manager.command
def custom(arg):
    # 命令的代码,比如:初始化数据库, 有个excel表格,使用命令导入到mysql中
    print(arg)


if __name__ == '__main__':
    manager.run()
  • 启动命令
python manage.py custom dream
PS E:flask_project\day006> python manage.py custom dream
dream
  • 启动命令会自动执行当前函数

【4】自定制复杂启动命令

from flask import Flask, render_template
from flask_script import Manager

app = Flask(__name__, template_folder='templates')
app.debug = True
manager = Manager(app)

@app.route('/', methods=['GET', 'POST'])
def index():
    return render_template('index.html')

@manager.command
def custom(arg):
    # 命令的代码,比如:初始化数据库, 有个excel表格,使用命令导入到mysql中
    print(arg)

@manager.option('-n', '--name', dest='name')
@manager.option('-u', '--url', dest='url')
def cmd(name, url):
    # python manage.py cmd -n mysql -u run
    # python manage.py cmd --name mysql --url run
    print(name, url)


if __name__ == '__main__':
    manager.run()
  • 启动命令
python manage.py cmd -n mysql -u run
python manage.py cmd --name mysql --url run
PS E:flask_project\day006> python manage.py cmd -n mysql -u run
mysql run