【python】flask各种版本的项目,终端命令运行方式的实现

2024-03-27 1098阅读

温馨提示:这篇文章已超过423天没有更新,请注意相关的内容是否还可用!

【python】flask各种版本的项目,终端命令运行方式的实现

✨✨ 欢迎大家来到景天科技苑✨✨

🎈🎈 养成好习惯,先赞后看哦~🎈🎈

🏆 作者简介:景天科技苑

🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN新星创作者,掘金优秀博主,51CTO博客专家等。

🏆《博客》:Python全栈,前后端开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi,flask等框架,linux,shell脚本等实操经验,网站搭建,面试宝典等分享。

所属的专栏:flask框架零基础,进阶应用实战教学

景天的主页:景天科技苑

文章目录

  • 终端脚本命令
    • flask1.0时代的终端命令使用
      • 安装命令
      • 自定义终端命令
      • flask2.0以后版本的终端命令使用
        • 使用flask终端命令之前,可以配置2个环境变量。
        • 查看支持的命令
        • Click自定义终端命令
        • 实战案例
        • 总结

          终端脚本命令

          flask在0.11版本之前都是采用flask-script第三方模块来实现终端脚本命令的执行,flask在0.11版本以后不再使用这个模块了,因为存在兼容性问题,所以内置了Click模块来实现终端脚本命令的执行。

          flask1.0时代的终端命令使用

          注意python3.9已不再支持flask1的版本,如果要运行flask1,就需要安装python3.8或以下版本

          flask-script模块的作用可以让我们通过终端来控制flask项目的运行,类似于django的manage.py

          官方文档:https://flask-script.readthedocs.io/en/latest/

          安装命令

          conda create -n py38 python=3.8

          conda activate py38

          pip install -U flask==1.1.4

          pip install -U flask-script -i https://pypi.douban.com/simple

          集成 Flask-Script到flask应用中,创建一个主应用程序,一般我们叫manage.py/run.py/main.py都行。

          manage.py,代码:

          from flask import Flas 
          app = Flask(__name__)
          """使用flask_script启动项目"""
          from flask_script import Manager
          manage = Manager(app)
          @app.route('/')
          def index():
              return 'hello world'
          if __name__ == "__main__":
              manager.run()
          

          启动终端脚本的命令:

          # 端口和域名不写,默认为127.0.0.1:5000
          python manage.py runserver
          # 通过-h设置启动域名,-p设置启动端口 -d
          python manage.py runserver -h0.0.0.0 -p8888     # 关闭debug模式
          python manage.py runserver -h0.0.0.0 -p8888  -d # 开启debug模式
          # 进入flask交互终端,在这个终端下,可以直接调用flask代码进行测试。
          python manage.py shell
          

          安装flask==1.1.4版本启动项目时,如果出现错误如下:

          from markupsafe import soft_unicode

          则找到报错代码位置,修改如下:

          from markupsafe import soft_str as soft_unicode

          自定义终端命令

          Flask-Script 还可以为当前应用程序添加脚本命令

          1. 引入Command命令基类

            from flask_script import Command

          2. 创建命令类必须直接或间接继承Command,并在内部实现run方法或者__call__()方法,

            同时如果有自定义的其他参数,则必须实现get_options方法或者option_list属性来接收参数

          3. 使用flask_script应用对象manage.add_command对命令类进行注册,并设置调用终端别名。

          manage.py,代码:

          from flask import Flask
          app = Flask(__name__)
          """使用flask_script管理项目"""
          from flask_script import Manager
          manager = Manager(app)
          from abc import ABC
          from flask_script import Command, Option
          class PrintCommand(Command, ABC):
              """
              命令的相关描述: 打印数据
              """
              def get_options(self):
                  # 必须返回选项
                  return (
                      # Option('简写选项名', '参数选项名', dest='变量名', type=数据类型, default="默认值"),
                      Option('-h', '--host', dest='host', type=str, default="127.0.0.1"),
                      Option('-p', '--port', dest='port', type=int, default=8000),
                      Option('-d', '--debug', dest='debug', type=bool, default=False)
                  )
              # 也可以使用option_list来替代get_options
              # option_list = (
              #     Option('-h', '--host', dest='host', type=str, default="127.0.0.1"),
              #     Option('-p', '--port', dest='port', type=int, default="7000"),
              #     Option('-d', '--debug', dest='debug', type=bool, default=False)
              # )
              # 没有flask的应用实例对象---->app对象
              # def run(self, host, port, debug):
              #     print("测试命令")
              #     print(f"self.host={host}")
              #     print(f"self.port={port}")
              #     print(f"self.debug={debug}")
              def __call__(self, app, host, port, debug):  # 会自动传递当前flask实例对象进来
                  print(f"测试命令,{app}")
                  print(f"self.host={host}")
                  print(f"self.port={port}")
                  print(f"self.debug={debug}")
          # manage.add_command("终端命令名称", 命令类)
          manager.add_command("print", PrintCommand)  # python manage.py print
          @app.route("/")
          def index():
              return "ok"
          if __name__ == '__main__':
              manager.run()
          

          使用效果:

          【python】flask各种版本的项目,终端命令运行方式的实现

          (flask) moluo@ubuntu:~/Desktop/flaskdemo$ python manage.py print -h 0.0.0.0 -p 8000

          测试命令

          self.host=0.0.0.0

          self.port=8000

          self.debug=False

          (flask) moluo@ubuntu:~/Desktop/flaskdemo$ python manage.py print -h 0.0.0.0 -p 8000 -d true

          测试命令

          self.host=0.0.0.0

          self.port=8000

          self.debug=True

          (flask) moluo@ubuntu:~/Desktop/flaskdemo$ python manage.py print -h 0.0.0.0 -d true

          测试命令

          self.host=0.0.0.0

          self.port=8000

          self.debug=True

          (flask) moluo@ubuntu:~/Desktop/flaskdemo$ python manage.py print --host=0.0.0.0 -debug=true

          测试命令

          self.host=0.0.0.0

          self.port=8000

          self.debug=True

          flask2.0以后版本的终端命令使用

          flask0.11.0版本以后,flask内置了一个Click模块,这个模块是终端命令模块,可以让我们直接通过Click的装饰器,编写和运行一些终端命令。

          在flask2.0版本已经不能兼容flask-script模块了,所以需要改成使用Click模块来运行和自定义管理终端命令了。

          安装了flask2.0以后,当前项目所在的python环境就提供了一个全局的flask命令,这个flask命令是Click提供的。

          要使用Click提供的终端命令flask,必须先在环境变量中声明当前flask项目的实例对象所在的程序启动文件。

          例如:manage.py中使用了 app = Flask(__name__),则manage.py就是程序启动文件

          使用flask终端命令之前,可以配置2个环境变量。

          #注意,这样配置环境变量,适合mac和linux系统,不适合Windows

          # 指定入口文件,开发中入口文件名一般:app.py/run.py/main.py/index.py/manage.py/start.py
          export FLASK_APP=manage.py
          # 指定项目所在环境
          export FLASK_DEBUG=True   # 开发环境,开启DEBUG模式
          # export FLASK_DEBUG=False    # 生产环境,关闭DEBUG模式
          

          默认情况下,flask命令提供的子命令。

          flask routes  # 显示当前项目中所有路由信息
          flask run     # 把flask项目运行在内置的测试服务器下
          #flask run --host=0.0.0.0 --port=5055
          flask shell   # 基于项目的应用上下文提供终端交互界面,可以进行代码测试。
          

          代码:

          from flask import Flask
          app = Flask(__name__)
          @app.route("/")
          def index():
              return "ok"
          if __name__ == '__main__':
              app.run()
          

          【python】flask各种版本的项目,终端命令运行方式的实现

          终端配置

          export FLASK_APP=manage.py
          export FLASK_DEBUG=True   # 开发环境,开启DEBUG模式
          

          【python】flask各种版本的项目,终端命令运行方式的实现

          查看支持的命令

          【python】flask各种版本的项目,终端命令运行方式的实现

          #查看下路由信息

          flask routes
          

          【python】flask各种版本的项目,终端命令运行方式的实现

          #进入shell,在shell中可以执行相关flask代码

          flask shell
          

          【python】flask各种版本的项目,终端命令运行方式的实现

          #运行

          flask run     # 把flask项目运行在内置的测试服务器下
          

          【python】flask各种版本的项目,终端命令运行方式的实现

          #指定ip和端口运行

          flask run --host=10.10.0.50 --port=5050
          

          【python】flask各种版本的项目,终端命令运行方式的实现

          Click自定义终端命令

          在终端自定义执行的命令行参数

          案例剖析

          #自定义终端命令需要导入click
          import click
          from flask import Flask
          app = Flask(__name__)
          #注册commond,自定义一个跟在flask后面的命令
          @app.cli.command("faker")  # 假设这个用于生成测试数据
          #faker后面跟的子命令参数。每个子命令名不能一样
          @click.argument("data", type=str, default="user") # 位置参数
          @click.argument("position", type=str, default="mysql") # 位置参数
          #第一个是参数简写,第二个是详细写全,第三个是函数内部调用的名字,type是类型,default是默认值,help是辅助信息
          @click.option('-n', '--number', 'number', type=int, default=1, help='生成的数据量.')  # 选项参数
          #我们上面自定义的faker,接子命令执行后,要实现的功能,通过下面这个函数来定义
          def faker_command(data, position, number):
              """
              命令的说明文档:添加测试信息
              """
              print("添加测试信息")
              print(f"数据类型:data={data}")
              print(f"数据类型:position={position}")
              print(f"生成数量:number={number}")
          @app.route("/")
          def index():
              return "ok"
          if __name__ == '__main__':
              app.run()
          

          【python】flask各种版本的项目,终端命令运行方式的实现

          终端运行,可以看到我们自定义的faker

          【python】flask各种版本的项目,终端命令运行方式的实现

          flask faker
          

          不写子命令,会打印出默认值

          【python】flask各种版本的项目,终端命令运行方式的实现

          也可以自定义

          flask faker teacher
          

          【python】flask各种版本的项目,终端命令运行方式的实现

          指定选项参数

          flask faker teacher -n200
          

          【python】flask各种版本的项目,终端命令运行方式的实现

          实战案例

          大家都知道,Django在终端命令行可以实现创建Django项目,自动创建好相关文件的操作,但是这一功能在flask中是没有集成进去的。

          我们通过今天的学的知识可以自己来实现

          要求:

          flask3.0的终端下,输入 python manage.py startapp home 则可以在当前目录下创建以下目录和文件

          项目目录/

          └── home

          ├── views.py

          ├── models.py

          ├── documents.py

          ├── ws.py

          ├── services.py

          ├── urls.py

          └── tests.py

          代码实现:

          import click, os
          from flask import Flask
          app = Flask(__name__)
          # 配置
          app.config.update({
              "DEBUG": False
          })
          @app.cli.command("startapp")
          @click.argument("name")
          # @click.option('-n', 'name', help='app name')
          def startapp(name):
              """生成子模块或子应用"""
              if os.path.isdir(name):
                  print(f"当前{name}目录已存在!请先处理完成以后再创建。")
                  return
              os.mkdir(name)
              open(f"{name}/views.py", "w")
              open(f"{name}/models.py", "w")
              open(f"{name}/documents.py", "w")
              open(f"{name}/ws.py", "w")
              open(f"{name}/services.py", "w")
              open(f"{name}/urls.py", "w")
              open(f"{name}/test.py", "w")
              print(f"{name}子应用创建完成....")
          @app.route("/")
          def index():
              return "ok"
          if __name__ == '__main__':
              app.run()
          

          【python】flask各种版本的项目,终端命令运行方式的实现

          终端调用:

          【python】flask各种版本的项目,终端命令运行方式的实现

          创建名为home的项目

          flask startapp home
          

          【python】flask各种版本的项目,终端命令运行方式的实现

          查看创建的文件

          【python】flask各种版本的项目,终端命令运行方式的实现

          创建名为users的项目:

          flask startapp users
          

          【python】flask各种版本的项目,终端命令运行方式的实现

          当然,也可以运用模板,在创建文件时,生成指定的模板,感兴趣的朋友试一下吧!

          总结

          本文讲述了flask1.0和falsk2.0以后的版本在终端脚本命令运行项目的方式,在工作中,我们经常以这种方式运行项目,有用得到的朋友一键三连,flask高阶应用持续更新中!!!

VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]