Flask自定义命令

Flask自定义命令

一、老版Flask自定义命令

Flask 1.x 和 2.x 版本

在Flask的老版本中,可以通过 flask-script 扩展来添加自定义命令。

  1. 安装所需库:

    python 复制代码
    pip3 install Flask-Script==2.0.3
    pip3 install flask==1.1.4
    pip3 install markupsafe=1.1.1
  2. 在 Flask 应用中创建一个 Manager 对象,并使用装饰器定义自定义命令:

    python 复制代码
    from flask_script import Manager
    manager = Manager(app)
    
    @manager.command
    def custom(arg):
        print(arg)
  3. 运行自定义命令:

    python 复制代码
    python manage.py custom 123

二、Flask 新版本(2.x 及以后)

Flask 新版本通过内置的 click 模块支持自定义命令,不再需要 flask-script

  1. 使用 click 装饰器定义命令:

    python 复制代码
    from flask import Flask
    import click
    
    app = Flask(__name__)
    
    @app.cli.command("create-user")
    @click.argument("name")
    def create_user(name):
        print(name)
  2. 运行自定义命令:

    python 复制代码
    flask --app 文件名:app create-user bruce

    如果你的脚本文件名为 app.py,则可以简化命令为:

    python 复制代码
    flask create-user lqz

三、flask自定义命令示例

  • 要求:制定一个flask命令,导入一个excel,把数据同步到 user表中

  • 代码示例

    • python 复制代码
      from flask import Flask, current_app
      import click
      import pymysql
      from openpyxl import load_workbook
      
      app = Flask(__name__)
      
      @app.cli.command("import_excel")
      @click.argument("excel_path")
      def import_excel(excel_path):
       """将指定路径的 Excel 文件数据导入到 user 表中"""
       # 加载 Excel 文件
       workbook = load_workbook(filename=excel_path)
       sheet = workbook.active
      
       # 连接数据库
       connection = pymysql.connect(host='localhost',
                                    port=3306,
                                    user='root',
                                    password='000',
                                    database='test',
                                    cursorclass=pymysql.cursors.DictCursor)
      
       try:
           with connection.cursor() as cursor:
               for row in sheet.iter_rows(min_row=2, values_only=True):  # 假设第一行为表头
                   # 构造插入语句,假设 Excel 文件中有 'user'
                   sql = "INSERT INTO user (name) VALUES (%s)"
                   cursor.execute(sql, row)
               connection.commit()
       finally:
           connection.close()
      
       print(f"Excel 数据导入完成,文件:{excel_path}")
      
      
      if __name__ == '__main__':
       app.run()

四、Django自定义命令

Django允许在应用中创建自定义命令,步骤如下:

  1. 在应用目录下创建 management/commands 文件夹结构。

  2. commands 文件夹中创建一个新的 Python 文件,该文件的名字将是你的命令名称。

  3. 在该文件中编写自定义命令的代码,继承 BaseCommand 类:

    python 复制代码
    from django.core.management.base import BaseCommand
    
    class Command(BaseCommand):
        help = '命令提示'
    
        def add_arguments(self, parser):
            parser.add_argument('path', nargs='*', type=str)
    
        def handle(self, *args, **kwargs):
            print('开始导入')
            print(args)
            print(kwargs)
  4. 使用自定义命令:

    python 复制代码
    python manage.py 文件名
相关推荐
C嘎嘎嵌入式开发2 小时前
(2)100天python从入门到拿捏
开发语言·python
Stanford_11062 小时前
如何利用Python进行数据分析与可视化的具体操作指南
开发语言·c++·python·微信小程序·微信公众平台·twitter·微信开放平台
white-persist4 小时前
Python实例方法与Python类的构造方法全解析
开发语言·前端·python·原型模式
Java 码农4 小时前
Centos7 maven 安装
java·python·centos·maven
你的人类朋友5 小时前
先用js快速开发,后续引入ts是否是一个好的实践?
前端·javascript·后端
倔强青铜三5 小时前
苦练Python第63天:零基础玩转TOML配置读写,tomllib模块实战
人工智能·python·面试
浔川python社5 小时前
《网络爬虫技术规范与应用指南系列》(xc—3):合规实操与场景落地
python
码事漫谈5 小时前
医疗设备控制系统中同步与异步通信的架构设计
后端
B站计算机毕业设计之家5 小时前
智慧交通项目:Python+YOLOv8 实时交通标志系统 深度学习实战(TT100K+PySide6 源码+文档)✅
人工智能·python·深度学习·yolo·计算机视觉·智慧交通·交通标志
码事漫谈5 小时前
C++ 中 rfind 方法详解
后端