Flask初识

发布于:2024-07-01 ⋅ 阅读:(15) ⋅ 点赞:(0)

Flask初识

一、概念说明

1. flask介绍

  • Flask 是一个轻量级的 Web 应用框架,基于 Werkzeug WSGI 工具包和 Jinja2 模板引擎

  • 核心特点

    • 微型框架:Flask 被称为“微”框架,因为它在设计上保持了核心的简洁和轻量。
    • 易于扩展:Flask 的扩展机制非常灵活,开发者可以通过安装扩展来添加诸如数据库集成、表单验证、上传处理等功能,这些扩展可以无缝集成到 Flask 应用中。
    • Werkzeug WSGI 工具包:Flask 使用 Werkzeug 作为其 WSGI 工具包和服务器,Werkzeug 提供了请求处理、响应封装和其他 Web 服务器相关的功能。
    • Jinja2 模板引擎:Flask 使用 Jinja2 作为其模板引擎,它允许开发者轻松地创建和渲染 HTML 页面,支持模板继承、布局组件等功能。

2. Werkzeug 介绍

  • Werkzeug 是一个强大的 WSGI工具包,它为 WSGI 应用程序提供了一系列实用功能。它并不是一个完整的 Web 服务器或框架,但它为开发者提供了一个底层的库,用于构建 Web 框架或直接创建 WSGI 应用。

  • 特点:

    • 遵循 WSGI 协议:Werkzeug 遵循 Python 的 WSGI 标准,这使得它可以与任何兼容 WSGI 的服务器或应用程序交互。

    • 丰富的工具集:它提供了请求(Request)和响应(Response)对象,以及其他与 Web 开发相关的实用功能,如 URL 映射、数据解析、会话管理等。

    • 灵活性和无依赖性:Werkzeug 不强制使用任何特定的模板引擎或数据库适配器,而是让开发者根据需要自由选择。

3. jinja2介绍

  • Jinja2 是一个强大的 Python 模板引擎,它允许开发者将模板和数据进行分离,以便生成动态的 HTML、XML、JSON 等格式的文档。

  • 特点:

    • 快速和表达性强:Jinja2 的设计注重速度和易用性,它的模板语法简洁,支持包括循环、条件判断、宏定义等在内的多种功能。

    • 与 Python 非常相似:模板中的特殊占位符允许使用类似于 Python 的语法,使得编写模板对 Python 开发者来说非常直观。

    • 可扩展性:Jinja2 支持自定义过滤器、测试、全局变量和函数,使得它可以很容易地被扩展以满足特定需求。

4. click 介绍

  • click 是一个用于创建命令行接口(CLI)的 Python 库,它使得编写命令行工具变得简单而有趣。

  • 特点:

    • 可组合性:click 允许开发者以模块化的方式构建命令行工具,支持命令的任意嵌套。

    • 自动帮助页面:click 能够自动生成帮助页面,无需开发者手动编写。

    • 延迟加载:click 支持在运行时延迟加载子命令,这意味着只有在需要时才会加载相关的命令处理逻辑。

  • 示例

    • # pip install click
      import click
      
      @click.command()
      @click.option('--count', default=1, help='Number of greetings.')
      @click.option('--name', prompt='Your name', help='The person to greet.')
      def hello(count, name):
          for x in range(count):
              click.echo(f"Hello {name}!")
      
      if __name__ == '__main__':
          hello()
      
      
  • 启动运行命令

    • # python 文件名.py 自定义参数
      python test.py --count=3
      python test.py --count=3 --name=bruce
      
    • # 查看帮助
      python 文件名.py --help
      

二、 Flask 创建和运行工具

1. python-dotenv

  • python-dotenv 是一个用于从 .env 文件加载环境变量的库。

    • 加载配置:通过 load_dotenv() 函数,可以将 .env 文件中的配置加载到环境变量中。
    • 安全性:建议将 .env 文件添加到 .gitignore 中,以避免将敏感信息(如密码)提交到版本控制。
  • 示例:

    • # pip install python-dotenv
      import os
      from dotenv import load_dotenv
      from dotenv import dotenv_values
      
      ## 1 加载配置文件,必须在根路径下新建一个 .env 的文件
      res = load_dotenv()  # res为加载结果,成功与否
      print(os.environ.get('name'))
      
      ## 2 获取 .env 环境变量字典
      config = dotenv_values(".env")
      print(config)
      
      

2. watchdog

  • watchdog 是一个用于监控文件系统变化的 Python 库。它可以被用来触发自定义的事件处理程序,例如在文件更改时自动运行测试或重启服务:

    • 文件系统监控:watchdog 可以监控指定目录下的文件变化,并触发事件处理程序。

    • 事件日志:LoggingEventHandler 是一个简单的事件处理程序,它将文件系统事件记录到日志中。

  • 示例:

    • 当前目录下文件修改会被监控到,打印日志

    • # pip3 install watchdog
      import sys
      import time
      import logging
      from watchdog.observers import Observer
      from watchdog.events import LoggingEventHandler
      
      if __name__ == "__main__":
          logging.basicConfig(level=logging.INFO,
                              format='%(asctime)s - %(message)s',
                              datefmt='%Y-%m-%d %H:%M:%S')
          path = sys.argv[1] if len(sys.argv) > 1 else '.'
          event_handler = LoggingEventHandler()
          observer = Observer()
          observer.schedule(event_handler, path, recursive=True)
          observer.start()
          try:
              while True:
                  time.sleep(1)
          except KeyboardInterrupt:
              observer.stop()
          observer.join()
      

三、 Flask简单示例

1. 输出hello world

from flask import Flask

# 创建app实例
app = Flask(__name__)

# 使用装饰器创建路由
@app.route('/', methods=['GET'])
def index():
    return 'hello world'

if __name__ == '__main__':
    app.run()

2. 运行方法

  1. python -m flask --app 文件名 run
  2. flask --app 文件名 run
  3. 如果文件名叫做app可以简写: flask --app run
  4. 调试模式:flask --app 文件名 run --debug
  5. 指定域名端口:flask --app 文件名 run --host=0.0.0.0 --port=5000

四、 配制文件

1. 默认配置项

  • Flask 的配置是通过一个继承自字典的 flask.config.Config 对象来管理的。
  • 它包含了一系列默认配置项,如 DEBUGSECRET_KEYSESSION_COOKIE_NAME 等,这些配置项控制了 Flask 应用的行为。

2. 配置修改方法

  1. 直接修改:可以直接在应用实例上修改配置,例如 app.debug = True
  2. 通过 app.config 修改:也可以通过 app.config 字典来修改配置,如 app.config['DEBUG'] = True
  3. 从 Python 文件加载:使用 app.config.from_pyfile('settings.py') 可以从 Python 文件中加载配置。
  4. 从对象加载:通过 app.config.from_object('settings.TestingConfig') 可以从类或模块中加载配置,其中类属性将用作配置项。
  5. 其他方法
    • app.config.from_envvar("环境变量名称"):从环境变量中指定的文件加载配置。
    • app.config.from_json("json文件名称"):从 JSON 文件中加载配置。
    • app.config.from_mapping({'DEBUG': True}):从字典或映射中加载配置。

3.使用配置中心

  • 在生产环境中,配置通常被集中管理。
  • Flask 应用可以通过请求配置中心的服务来获取配置信息,这通常涉及到发送 HTTP 请求并接收 JSON 格式的配置数据。

4. dotenv 的使用

python-dotenv 库可以与 Flask 配合使用,以从 .env 文件中加载环境变量。这有助于保护敏感信息,如数据库密码,并简化开发流程。

5. 配置项示例

1.DEBUG: 是否开启调试模式
app.config['DEBUG'] = True  # 开启调试模式

2.SECRET_KEY: 用于安全地签名会话 cookie。
app.config['SECRET_KEY'] = 'a_very_secret_key'

3.SESSION_COOKIE_NAME: 设置会话 cookie 的名称。
app.config['SESSION_COOKIE_NAME'] = 'my_session'

4.PERMANENT_SESSION_LIFETIME: 设置永久会话的生存时间。
app.config['PERMANENT_SESSION_LIFETIME'] = timedelta(minutes=30)  # 设置会话生存时间为30分钟

5.APPLICATION_ROOT: 如果应用程序不是部署在根路径下,可以设置应用程序的根路径。
app.config['APPLICATION_ROOT'] = '/myapp'

6.MAX_CONTENT_LENGTH: 设置客户端可以上传的最大内容长度。
app.config['MAX_CONTENT_LENGTH'] = 16 * 1024 * 1024  # 设置最大上传文件大小为16MB

7.PREFERRED_URL_SCHEME: 设置 Flask 预期的 URL 方案(http 或 https)。
app.config['PREFERRED_URL_SCHEME'] = 'https'

8.JSON_AS_ASCII: 设置 JSON 输出是否只包含 ASCII 字符。
app.config['JSON_AS_ASCII'] = False  # 允许非 ASCII 字符在 JSON 输出中

9.JSONIFY_PRETTYPRINT_REGULAR: 设置 jsonify() 是否应格式化输出。
app.config['JSONIFY_PRETTYPRINT_REGULAR'] = True  # 开启 JSON 输出的格式化、