Flask之Flask-script

flask-script

flask的组件,用于运行flask程序。

Flask-Script是一个让你的命令行支持自定义命令的工具,它为Flask程序添加一个命令行解释器。可以让我们的程序从命令行直接执行相应的程序

通过使用Flask-Script扩展,我们可以在Flask服务器启动的时候,通过命令行的方式传入参数。而不仅仅通过app.run()方法中传参,比如我们可以通过python hello.py runserver –host ip地址,告诉服务器在哪个网络接口监听来自客户端的连接。默认情况下,服务器只监听来自服务器所在计算机发起的连接,即localhost连接。
我们可以通过python hello.py runserver --help来查看参数。

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

  • 安装

    pip3 install flask-script
    
  • 首先需要建立manage.py文件

    1. 如果你直接在主manage.py文件里面写命令,那么只需要在终端直接输入python manage.py command_name

      • 首先要引入当前的app(只是个名字,从主执行文件调用),然后传入给Manager对象,在建立命令函数时,注意上方有添加一个@manager.command的修饰器,最后在主函数里执行即可
      from flask_script import Manager
      from app import app
      
      manager = Manager(app)
      
      @manager.command
      def runserver():
          print("it's running")
      
      
      if __name__ == '__main__':
          manager.run()
      

      python manage.py runserver(这里的runserver只是指令名字)

      img

      image.png

      1. 如果存在命令分离,比如将某一类的功能模块命令单独开,则在执行时需要先在主文件里面引入,然后在终端先执行父命令再执行子命令,详见后文示例
      • 这里新建一个db_script.py来处理数据库方面的指令,因为最后会在主文件中调用执行,所以这里不用传入app名字,直接生成Manager()对象即可

      db_script.py
      这里简单定义了两个方法init 和 migrate,显示两条输出语句

      from flask_script import  Manager
      
      DBManager = Manager()
      
      @DBManager.command
      def init():
          print("初始化")
          
      @DBManager.command
      def migrate():
          print("数据迁移")
      

      manage.py

      • 在主文件里首先引入了刚才新建立的DBManager对象,然后用add_command方法建立新的执行命令并设定名字(这里是db)
      from flask_script import Manager
      from app import app
      from db_script import DBManager
      manager = Manager(app)
      
      @manager.command
      def runserver():
          print("it's running")
      
      manager.add_command('db', DBManager)
      
      
      if __name__ == '__main__':
          manager.run()
      

      执行

      python manage.py db init或者python manage.py db migrate

      img

  • 其他执行命令

    from s24day95 import create_app
    from flask_script import Manager
    
    app = create_app()
    manager = Manager(app)
    
    @manager.command
    def custom(arg):
        """
        自定义命令
        python manage.py custom 123
        :param arg:
        :return:
        """
        print(arg)
    
    @manager.option('-n', '--name', dest='name')
    @manager.option('-u', '--url', dest='url')
    def cmd(name, url):
        """
        自定义命令
        执行: python manage.py  cmd -n wupeiqi -u http://www.oldboyedu.com
        :param name:
        :param url:
        :return:
        """
        print(name, url)
    
    if __name__ == '__main__':
        manager.run()
    
  • 其他

    结合:flask-migrate / flask-sqlalchemy
    
    python manage.py migrate 
    
posted @ 2019-11-26 19:30  adrian-boy  阅读(624)  评论(0编辑  收藏  举报