zoukankan      html  css  js  c++  java
  • 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 
      
  • 相关阅读:
    hdu5754_找规律+威佐夫博弈
    codeforce645C_尺取法
    hdu4336_容斥dp
    poj3071_概率dp
    codeforces148D_推论题
    poj2151_概率dp
    hdu3853_概率dp
    POJ 1410 判断线段与矩形交点或在矩形内
    POJ 1066 Treasure Hunt 线段相交判断
    POJ 2653 Pick-up sticks 判断线段相交
  • 原文地址:https://www.cnblogs.com/zhufanyu/p/11937876.html
Copyright © 2011-2022 走看看