zoukankan      html  css  js  c++  java
  • Flask 第九话之命令行插件 -- Flask-script

    简介:

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

    一、安装

    pip intsall flask-script

     二、基本结构

    from flask_script import Manager
    manager = Manager(app)
    
    """代码书写函数"""
    
    
    if __name__ == '__main__':
        manager.run()

    三、命令定义

    1.@manager.command:执行命令 python manager.py 函数名

    from flask_script import Manager
    manager = Manager(app)
    
    
    #  定义命令1:python manager.py greet(函数名) ===> 你好
    @manager.command
    def greet():
        print("你好")
    
    
    if __name__ == '__main__':
        manager.run()

    2.@manager.option(-命令简称,--命令全称,dest=‘参数’):执行命令 python manager.py 函数名 -命令简称1 参数1 -命令简称2 参数2...

    from flask_script import Manager
    manager = Manager(app)
    
    
    # @manager.option(命令简写,命令全称,dest='传入的参数'),几个参数写几个option
    #  定义命令2:python manager.py  add_user -n aaa -a 18 ===> aaa 18
    @manager.option('-n','--name',dest='name')
    @manager.option('-a','--age',dest='age')
    def add_user(name,age):
        print(name,age)
    
    
    if __name__ == '__main__':
        manager.run()

    3.add_command("子命令",其他命令py文件):执行命令 python manager.py 子命令 (命令方式1/命令方式2)

    创建一个db_script.py的文件写子命令代码:

    from flask_script import Manager
    
    db_manager = Manager()
    
    # python manager.py db init
    @db_manager.command
    def init():
        print("迁移仓库创建完毕")
    
    @db_manager.command
    def revision():
        print("迁移脚本生成成功")
    
    @db_manager.command
    def upgrade():
        print("提交数据库")

    manager.py中使用add_command

    from flask_script import Managerfrom db_script import db_manager
    manager = Manager(app)
    # 定义命令3: 添加一个子命令
    manager.add_command("db",db_manager)
    
    
    if __name__ == '__main__':
        manager.run()

    四、小实验

    实现:命令行操作flask数据库

    Flask

    from flask import Flask
    from flask_sqlalchemy import SQLAlchemy
    import config
    app = Flask(__name__)
    app.config.from_object(config)
    
    db = SQLAlchemy(app)
    
    class User(db.Model):
        __tablename__ = "user"
        id = db.Column(db.Integer,primary_key=True,autoincrement=True)
        username = db.Column(db.String(50),nullable=False)
        email = db.Column(db.String(50),nullable=False)
    
    # db.create_all()
    
    @app.route('/')
    def hello_world():
        return 'Hello World!'
    
    
    if __name__ == '__main__':
        app.run()
    app.py
    HOSTNAME = '127.0.0.1'
    PORT = 3306
    DATABASE = 'db_demo'
    USERNAME = 'root'
    PASSWORD = '123456'
    
    # 链接数据库的字符串,固定格式
    DB_URI = "mysql+pymysql://{username}:{password}@{host}:{port}/{db}?charset=utf8".format(
        username = USERNAME,
        password = PASSWORD,
        host = HOSTNAME,
        port = PORT,
        db = DATABASE,
    )
    
    
    SQLALCHEMY_DATABASE_URI = DB_URI
    SQLALCHEMY_TRACK_MODIFICATIONS = False
    DEBUG = True
    TEMPLATES_AUTO_RELOAD=True
    config.py

    Flask-script

    from flask_script import Manager
    from app import app,User,db
    manager = Manager(app)
    
    # python manager.py  add_sql_user -u aaa -e 895025041@qq.com
    #  小实验:命令操作flask的数据库
    @manager.option('-u','--username',dest='username')
    @manager.option('-e','--email',dest='email')
    def add_sql_user(username,email):
        u = User(username = username,email = email)
        db.session.add(u)
        db.session.commit()
    
    
    if __name__ == '__main__':
        manager.run()
    manager.py
  • 相关阅读:
    kettle-学习参考
    spring retry 重试机制完整例子
    一个四五年的Java开发程序员,该准备哪些去面试?
    Java之io nio aio 的区别
    Java对象的存活判断
    Java+微信支付(下预购单+回调+退款+查询账单)
    Java +支付宝 +接入
    关于MQ 消息队列的通俗理解和 rabbitMQ 使用
    java 对接芝麻信用 -用芝麻私钥解密错误
    mysql 乐观判断 校验
  • 原文地址:https://www.cnblogs.com/lee-xingxing/p/12417019.html
Copyright © 2011-2022 走看看