Flask初识

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 LoggingEventHandlerif __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  # 设置最大上传文件大小为16MB7.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 输出的格式化、

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/34494.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024年通信技术与计算机科学国际学术会议(ICCTCS 2024)

2024年通信技术与计算机科学国际学术会议(ICCTCS 2024) 2024 International Academic Conference on Communication Technology and Computer Science(ICCTCS 2024) 会议简介: 2024年通信技术与计算机科学国际学术会议…

PostgreSQL物理备份-pg_rman

1.简介 pg_rman 是类似于 oracle 的 rman 备份工具,它实现了全量、增量、归档等类型的备份, 可以很灵活的管理 PostgreSQL 数据库的备份。pg_rman 是一款开源的 PostgreSQL 的 备份恢复插件,支持在线备份和基于 PITR 的恢复方式。 2.pg_rma…

Leetcode.1735 生成乘积数组的方案数

题目链接 Leetcode.1735 生成乘积数组的方案数 rating : 2500 题目描述 给你一个二维整数数组 q u e r i e s queries queries ,其中 q u e r i e s [ i ] [ n i , k i ] queries[i] [n_i, k_i] queries[i][ni​,ki​] 。第 i i i 个查询 q u e r i e s [ i …

JAVA SDK 整合 AI 大语言模型

目前主流模型厂商的 SDK 并没有很好的支持 JAVA 环境,主流还是使用的 Python ,如果希望将 AI 功能集成到业务中来,则需要找找有没有一些现成的开源项目,但是这种项目一般需要谨慎使用,以防有偷取 app_key 等风险问题 前…

如何在Linux下使用git(几步把你教会)

目录 一、注册github账号 二、新建项目 1.点击右上角自己的头像,然后点击Your repositories。 2.点击New。 3.配置新项目信息。 4.点击Create repository即可成功创建。 三、安装git 四、配置git 五、初始化git仓库 1.先进入想要使用git的目录。 2.初始化…

数据时代的数字企业

1.写在前面 讨论数据治理在数字企业中的影响和必要性,并介绍数据治理的核心内容和实践方法。作者强调了数据质量、数据安全、数据隐私和数据合规等方面是数据治理的核心内容,并介绍了具体的实践措施和案例分析。企业需要重视这些方面以实现数字化转型和…

多孔散热器简介

今天给大家分享关于多孔散热器的一些构造、散热情况。 更多资讯,请关注B站【莱歌数字】,有视频教程~~ 常见的散热器通常由不渗透水、空气和其他液体的无孔材料制成。固体铝和铜是行业标准。 但散热器也可以作为半多孔材料或多孔涂层。研究和应用表明&…

防静电监控系统全方位防静电监测,保障产品质量

在当今高度精密的电子制造领域,产品质量的保障至关重要。哪怕是微小的静电干扰,都可能导致电子元件损坏、性能下降,从而影响整个产品的质量和可靠性。为了应对这一挑战,某电子工厂车间引入了先进的防静电监控系统,实现…

11g rac db安装软件时找不到 节点的问题处理

问题 在安装11.2.0.4db软件时数据库软件无法识别集群的两个主机 处理方法 [oracleracdg1-1 database]$ cd /u01/app/oraInventory/ [oracleracdg1-1 oraInventory]$ ls ContentsXML logs oraInst.loc orainstRoot.sh oui [oracleracdg1-1 oraInventory]$ cd ContentsXML/…

Qt | QSS自定义部件的外观

01、简介 一、自定义部件外观基础 1、有 3 种方法可实现自定义界面外观:重新实现 paintEvent()函数,使用 QStyle 类的绘制函数,子类化 QStyle,本小节仅介绍方法 1 和 2 的使用方式,方法 3 见下一节。 2、方法一:Qt 通过 QWidget::paintEvent()函数实现界面外观的绘制,…

7-什么是自动驾驶中的CopyCat?

"CopyCat"这个词通常有两个含义: 字面意思:它可以指一个模仿别人的人,就像猫一样模仿其他猫的行为。在日常用语中,如果有人说某人是个"copycat",他们可能是在说这个人缺乏原创性,总是…

Linux运行jar包:Invalid or corrupt jarfile

你们好,我是金金金。 场景 maven打包springboot项目得到一个jar包,我通过xshell上传到虚拟机环境里面,试图运行它,结果Invalid or corrupt jarfile:jar 文件无效或损坏 排查 jdk版本是否一致?结果&#xf…

参数页面设计

目录 一 设计原型 二 后台源码 一 设计原型 二 后台源码 namespace 参数页面设计 {public partial class Form1 : Form{List<PMs> PMs new List<PMs>();public Form1(){InitializeComponent();}private void Form1_Load(object sender, EventArgs e){for (int …

深入解析 Python dataclass:类属性与类方法解释

文章目录 dataclass实例属性和类属性自动设置属性 实例方法静态方法&#xff08;staticmethod&#xff09;和 类方法&#xff08;classmethod&#xff09;静态方法类方法 dataclass dataclass 是 Python 3.7 引入的一个装饰器&#xff0c;用于简化类的定义。 使用 dataclass …

Django教程(001):安装及快速上手

1.1 Django安装 pip install django安装之后 c:\python39-python.exe-Scripts-pip.exe-django-admin.exe【安装django之后&#xff0c;工具&#xff0c;创建django项目】-Lib-内置模块-site-packages-flask-django(安装django之后&#xff0c;【django框架源码】)如下图&…

oracle如何分段写入clob字段

在Oracle数据库中&#xff0c;当需要向CLOB字段中写入大量数据时&#xff0c;通常需要分段写入&#xff0c;以避免因单次写入数据量过大而导致的问题。以下是正确分段写入CLOB字段中数据的步骤和注意事项&#xff1a; 1. 使用DBMS_LOB包 Oracle提供了DBMS_LOB包&#xff0c;它…

思考题:相交的几何图形

给定不超过 26 个几何图形&#xff0c;每个图形都有一个唯一大写字母作为其编号。 每个图形在平面中的具体位置已知&#xff0c;请你判断&#xff0c;对于每个图形&#xff0c;有多少个其他图形与其存在交点。 在判断交点时&#xff0c;只考虑边与边相交的情况&#xff0c;如…

AIGC+艺术=教育变革?

在数字化时代的浪潮中&#xff0c;技术的每一次跃进都深刻影响着社会的各个领域&#xff0c;教育亦不例外。近年来&#xff0c;人工智能生成内容&#xff08;AIGC&#xff09;技术的兴起&#xff0c;为艺术教育领域带来了前所未有的变革机遇。当AIGC与艺术相结合&#xff0c;我…

kafka 集群安全认证机制的设计实现

kafka 集群安全认证机制的实现 Kafka 提供了多种安全认证机制来保护数据传输的安全性,包括加密、身份认证和授权。这些机制确保 了 Kafka 集群的通信安全和数据访问控制。以下是 Kafka 安全认证机制的实现和配置指南。 1. 安全认证机制概述 Kafka 支持以下几种主要的安全机…

vscode 删除不用的ssh远程连接

使用vscode连接一个远程服务器发现联不通&#xff0c;但是使用mobaxterm是可以通的&#xff0c;最后原因发现是这个服务器ip与之前连过的另一台相同&#xff0c;和之前连接保存的信息冲突了 解决办法&#xff1a; 使用记事本打开这个路径下的known_hosts(最好备份一下)&#x…