【Python】使用flask作为web服务器

一、flash轻量级web框架介绍

Python Flask 框架是一个轻量级的 Web 框架,它简单易用,灵活多变,非常适合用于构建小型到中型规模的 Web 应用程序。以下是 Flask 框架的详细介绍:

1、基本概念

Flask 是一个基于 Python 的微型 Web 开发框架,主要面向小型应用和开发初期需求简单的项目。相比于 Django 这种重量级的框架,Flask 更加轻量级,易于使用和部署。它提供了基本的路由、模板渲染、错误处理等 Web 开发的核心功能,但保持了足够的灵活性,允许开发者根据需要选择和添加其他库来扩展功能。

2、主要特点

  1. 轻量级:Flask 保持核心功能简单,易于理解和使用。这使得 Flask 成为一个非常适合快速开发和迭代的框架。
  2. 灵活性:Flask 不强制使用特定的库或工具,开发者可以根据自己的需求选择适合的组件。例如,可以使用不同的数据库、模板引擎等。
  3. 可扩展性:虽然 Flask 本身功能简单,但它提供了丰富的扩展接口。开发者可以通过安装 Flask 扩展来添加各种功能,如数据库支持、表单处理、安全性等。
  4. 强大的社区支持:Flask 有一个活跃的社区,提供了大量的教程、示例代码和第三方库。这使得开发者在遇到问题时能够迅速找到解决方案。

3、核心组件

  1. 路由系统:Flask 通过装饰器 @app.route() 定义路由规则,将 URL 映射到相应的处理函数。这使得路由的定义非常直观和简洁。
  2. 模板引擎:Flask 默认使用 Jinja2 模板引擎进行 HTML 渲染。Jinja2 提供了丰富的模板标签和过滤器,使得动态生成 HTML 页面变得简单高效。
  3. 请求上下文:Flask 通过请求上下文(request context)来处理 HTTP 请求。开发者可以从请求上下文中获取请求数据,如查询参数、表单数据等。
  4. 响应对象:Flask 允许开发者通过响应对象(response object)自定义 HTTP 响应。可以设置状态码、响应头、响应体等内容。
  5. 错误处理:Flask 提供了强大的错误处理机制。开发者可以定义错误处理器来处理不同类型的 HTTP 错误,如 404(页面未找到)和 500(服务器内部错误)等。
  6. 会话管理:Flask 支持基于 cookie 的会话管理。开发者可以轻松地在会话中存储和检索数据,实现用户状态的跟踪和管理。

4、扩展与生态

Flask 的生态系统非常丰富,有大量第三方扩展可供选择。以下是一些常用的 Flask 扩展:

  1. Flask-SQLAlchemy:为 Flask 提供了 ORM(对象关系映射)支持,使得开发者能够更方便地操作数据库。
  2. Flask-WTF:提供了表单处理功能,包括表单验证、CSRF 保护等。
  3. Flask-Login:用于处理用户登录和权限验证。
  4. Flask-Migrate:提供了数据库迁移功能,便于管理数据库模式的变更。
  5. Flask-Mail:用于发送电子邮件。
  6. Flask-Babel:支持国际化,使得开发者可以轻松地实现多语言应用。

5、总结

Flask 框架以其轻量级、灵活性和可扩展性著称,非常适合用于构建小型到中型规模的 Web 应用程序。它提供了基本的 Web 开发功能,并允许开发者根据需要选择和添加其他库来扩展功能。Flask 强大的社区支持和丰富的生态系统使得开发者能够轻松地找到解决问题的方法和工具。

二、使用代码示例

以下是一个简单的 Flask 应用程序的代码示例,它涵盖了基本的路由、模板渲染和简单的表单处理。

首先,确保你已经安装了 Flask。如果没有,请通过运行以下命令进行安装:

pip install Flask

然后,你可以创建一个简单的 Flask 应用程序,如下所示:

# 导入 Flask 类
from flask import Flask, render_template, request# 创建 Flask 应用实例
app = Flask(__name__)# 定义一个简单的路由和处理函数
@app.route('/')
def hello_world():return 'Hello, World!'# 定义一个带参数的路由
@app.route('/greet/<name>')
def greet(name):return f'Hello, {name}!'# 定义一个用于处理 POST 请求的路由,用于接收表单数据
@app.route('/submit', methods=['GET', 'POST'])
def submit():if request.method == 'POST':name = request.form.get('name')return f'Hello, {name}! Your form has been submitted.'return render_template('form.html')# 如果你的应用程序有一个名为 'templates' 的文件夹,并在其中有一个 'form.html' 文件,
# Flask 会自动从该文件夹中加载模板。# 启动 Flask 开发服务器,默认端口5000
# 可以增加参数 port 来指定端口
if __name__ == '__main__':app.run(debug=True)# app.run(debug=True, port=8088)

接下来,创建一个名为 templates 的文件夹,并在其中创建一个名为 form.html 的 HTML 模板文件,内容如下:

<!DOCTYPE html>
<html>
<head><title>Flask Form Example</title>
</head>
<body><h1>Submit Your Name</h1><form method="POST" action="/submit"><input type="text" name="name" placeholder="Your name"><input type="submit" value="Submit"></form>
</body>
</html>

这个简单的 Flask 应用程序做了以下几件事:

  1. 当用户访问根 URL (/) 时,它会返回一个简单的 “Hello, World!” 字符串。
  2. 当用户访问 /greet/<name> URL 时,它会返回一个个性化的问候语,其中 <name> 是用户提供的名字。
  3. 当用户访问 /submit URL 时,如果是 GET 请求,它会显示一个包含表单的 HTML 页面。用户可以在表单中输入他们的名字,并提交表单。如果是 POST 请求(即用户提交了表单),它会读取表单中的名字,并返回一个包含该名字的问候语。

要运行此应用程序,请将上述 Python 代码保存为 app.py(或其他你喜欢的文件名),然后在命令行中运行以下命令:

python app.py

这将启动 Flask 的开发服务器,并监听默认的 127.0.0.1:5000 地址。你可以通过浏览器访问 http://127.0.0.1:5000/ 来查看应用程序。

三、使用jsonify make_response返回 json 数据

jsonifymake_response 都是 Flask 框架中用于创建 HTTP 响应的工具,但它们在使用和功能上有一些区别。

jsonify

jsonify 是一个便捷函数,专门用于生成 JSON 响应。当你需要将数据以 JSON 格式返回给客户端时,使用 jsonify 非常方便。它会自动将数据转换为 JSON 格式,并设置正确的 Content-Typeapplication/json。此外,jsonify 还允许你添加额外的 HTTP 头部或状态码。

示例:

from flask import Flask, jsonifyapp = Flask(__name__)@app.route('/data', methods=['GET'])
def get_data():data = {'key': 'value'}return jsonify(data), 200  # 返回 JSON 响应和状态码 200

make_response

make_response 是一个更通用的函数,用于创建一个响应对象。你可以使用它来创建任何类型的响应,不仅仅是 JSON。通过 make_response,你可以设置响应体、状态码、头部信息等。如果你需要更多的控制或需要创建非 JSON 响应,make_response 是一个好选择。

示例:

from flask import Flask, make_responseapp = Flask(__name__)
# 默认情况下,Flask会在应用的templates文件夹中查找模板文件
# 可以增加参数指定模板目录
# app = Flask(__name__, template_folder='my_templates')@app.route('/text', methods=['GET'])
def get_text():response = make_response('Hello, World!')response.headers['Content-Type'] = 'text/plain'return response

区别总结

  1. 专用性与通用性jsonify 专门用于创建 JSON 响应,而 make_response 可以用于创建任何类型的 HTTP 响应。
  2. 便捷性:当你需要快速返回一个 JSON 响应时,jsonify 提供了更简洁的语法。而 make_response 需要你手动设置响应体和头部信息。
  3. 自动转换jsonify 会自动将数据转换为 JSON 格式,并设置正确的 Content-Type 头部。而使用 make_response 时,你需要自己处理这些转换和设置。
  4. 灵活性:虽然 jsonify 在处理 JSON 响应时非常方便,但如果你需要创建其他类型的响应或需要更多的控制(如自定义头部、设置 cookies 等),make_response 会更加灵活。

在选择使用 jsonify 还是 make_response 时,主要考虑你的具体需求和响应类型。如果你只是需要返回一个简单的 JSON 响应,那么 jsonify 通常是更好的选择。如果你需要更多的自定义或控制,或者需要返回非 JSON 响应,那么 make_response 会更合适。

四、日志打印

在 Flask 中,app.logger 是一个预配置的日志记录器,你可以使用它来记录应用程序的日志。默认情况下,app.logger 将日志输出到控制台。如果你希望将日志记录到文件中,你需要对日志处理器(handler)和格式化器(formatter)进行配置。

以下是一个示例,展示了如何在 Flask 应用程序中将日志记录到文件中:

from flask import Flask
import logging
from logging.handlers import RotatingFileHandlerapp = Flask(__name__)# 配置日志记录器
handler = RotatingFileHandler('app.log', maxBytes=1024 * 1024, backupCount=5)  # 创建一个日志文件,最大1MB,备份5个
handler.setLevel(logging.INFO)  # 设置日志级别为 INFO
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')  # 设置日志格式
handler.setFormatter(formatter)  # 为处理器设置格式化器app.logger.addHandler(handler)  # 将处理器添加到 Flask 的日志记录器中
app.logger.setLevel(logging.INFO)  # 设置 Flask 日志记录器的级别为 INFO@app.route('/')
def index():app.logger.info('This is an info message')app.logger.warning('This is a warning message')return 'Hello, World!'if __name__ == '__main__':app.run(debug=True)

在这个示例中,我们使用了 RotatingFileHandler,它将日志记录到一个文件中,并且当文件达到一定大小时会自动分割和备份。我们设置了日志文件的最大大小为 1MB,并保留 5 个备份文件。日志级别设置为 INFO,这意味着将记录 INFO 级别及以上的日志。我们还定义了一个日志格式,包括时间戳、记录器名称、日志级别和日志消息。最后,我们将这个处理器添加到 Flask 的日志记录器中,并设置了日志级别。

现在,当你运行 Flask 应用程序并访问根路由时,你应该会在名为 app.log 的日志文件中看到相应的日志记录。

参考

  • 中文官网
  • Jinja2模板

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

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

相关文章

Paper速读-[Visual Prompt Multi-Modal Tracking]-Dlut.edu-CVPR2023

文章目录 简介关于具体的思路问题描述算法细节实验结果模型的潜力模型结果 论文链接&#xff1a;Visual Prompt Multi-Modal Tracking 开源代码&#xff1a;Official implementation of ViPT 简介 这篇文章说了个什么事情呢&#xff0c;来咱们先看简单的介绍图 简单来说&…

【玩转C语言】第一讲--->C语言概念

&#x1f525;博客主页&#x1f525;&#xff1a;【 坊钰_CSDN博客 】 欢迎各位点赞&#x1f44d;评论✍收藏⭐ 目录 引言&#xff1a; 1. C语言是什么 2. C语言的辉煌历史 3. 第一个C语言程序 4. main()函数 5. printf() 函数 6. 库函数 6.1 库函数概念 7. 关键字介绍 …

工具:一键采集 平台:TB+PDD+JD...

什么是数据集&#xff1f; 电商商品数据集通常是指收集自电子商务平台的商品信息的结构化数据集合。这些数据包括但不限于商品名称、价格、描述、用户评价、分类标签、卖家信息、销售量、库存量、图片链接等。数据集可以由电商平台公开提供&#xff0c;也可以通过网络爬虫等技术…

沟通技巧(Communication Skills 业务分析能力)

背景 业务分析的胜任力模型&#xff0c;有六大部分&#xff0c;今天我们看第二部分&#xff0c;业务知识 Analytical Thinking and Problem Solving &#xff1a;分析判断及问题解决能力Behavioural Characteristics&#xff1a; 行为特质&#xff08;责任、道德、适应性等等…

Kubernetes小记

Kubernetes 集群 架构 一个有效的 Kubernetes 部署称为集群&#xff0c;可以将 Kubernetes 集群分为两个部分&#xff1a;控制平面与计算设备&#xff08;或称为节点&#xff09;控制组件 控制平面 K8s 集群的神经中枢,负责处理重要的工作&#xff0c;以确保容器以足够的数量…

GCN 代码解析(一) for pytorch

Graph Convolutional Networks 代码详解 前言一、数据集介绍二、文件整体架构三、GCN代码详解3.1 utils 模块3.2 layers 模块3.3 models 模块3.4 模型的训练代码 总结 前言 在前文中&#xff0c;已经对图卷积神经网络&#xff08;Graph Convolutional Neural Networks, GCN&am…

小程序CI/CD之自动化打包预览并钉钉通知发布进程

小程序打包方式分为两种&#xff1a;手动打包、自动打包 那如何实现 自动打包 呐&#xff1f;我们今天就来聊一聊&#xff01; 首先&#xff0c;很重要&#xff0c;看 官方文档 这里提到今天我们要聊的“主角” miniprogram-ci miniprogram-ci 是从微信开发者工具中抽离的关于…

nacos开启鉴权

nacos版本1.4.3 1.nacos配置开启鉴权 application.properties 或 application.yaml 文件中 nacos.core.auth.enabled 设置为 true 2.修改JWT令牌 如果是Linux系统可以使用命令随机生成 echo -n ThisIsARandomlyGeneratedSecureKey32CharactersLong | base64 nacos.core.au…

【HarmonyOS-Stage应用模型-UIAbility生命周期】

概述 在应用开发过程中&#xff0c;组件的生命周期尤为重要&#xff0c;当用户打开、切换和返回到对应应用时&#xff0c;应用中的UIAbility实例会在其生命周期的不同状态之间转换。我们可以通过生命周期来对应用的状态进行监控并执行特定的操作。比如在创建时进行应用初始化、…

网络摄像头项目

1.OV2640 简介 OV2640 是 OV&#xff08;OmniVision&#xff09;公司生产的一颗 1/4 寸的 CMOS UXGA&#xff08;1632*1232&#xff09;图像 传感器。该传感器体积小、工作电压低&#xff0c;提供单片 UXGA 摄像头和影像处理器的所有功能。通 过 SCCB 总线控制&#xff0c;可以…

【机器学习】LoRA:大语言模型中低秩自适应分析

LoRA&#xff1a;大型语言模型中的低秩自适应调优策略 一、LoRA的原理与优势二、LoRA在编程和数学任务中的性能表现四、总结与展望 随着人工智能技术的飞速发展&#xff0c;大型语言模型已成为自然语言处理领域的明星技术。然而&#xff0c;这些模型通常拥有数以亿计的参数&…

做好产线工控安全的关键

在现代化工业生产中&#xff0c;产线工控安全是确保生产顺利进行、产品质量稳定、员工生命安全的重要一环。随着信息技术的飞速发展&#xff0c;工控系统面临着越来越多的安全威胁&#xff0c;因此&#xff0c;如何做好产线工控安全成为了摆在我们面前的重要课题。 首先&#x…

使用Python进行高并发压测:技术指南与实战案例

目录 一、引言 二、压测基础知识 压测的目的与类型 压测工具的选择 三、使用Python进行压测 Python压测框架的选择 压测脚本的编写 压测的执行与监控 四、实战案例分析 案例背景介绍 压测计划制定 压测实施过程 结果分析与优化建议 五、常见问题与解决方案 六、…

linux中SSH_ASKPASS全局变量的作用

在工作中遇到一段代码&#xff0c;通过SSH_ASKPASS全局变量实现了ssh登录远程IP时的密码输入&#xff0c;chatgpt搜索了一下&#xff0c;其解释大致如下所示&#xff1a; SSH_ASKPASS 是一个环境变量&#xff0c;它在 SSH 客户端需要用户输入密码时起作用。当 SSH 客户端检测到…

centos7下卸载MySQL,Oracle数据库

&#x1f4d1;打牌 &#xff1a; da pai ge的个人主页 &#x1f324;️个人专栏 &#xff1a; da pai ge的博客专栏 ☁️宝剑锋从磨砺出&#xff0c;梅花香自苦寒来 操作系统版本为CentOS 7 使⽤ MySQ…

JVM 运行流程

JVM 是 Java 运行的基础&#xff0c;也是实现一次编译到处执行的关键&#xff0c;那么 JVM 是如何执行的呢&#xff1f; JVM 执行流程 程序在执行之前先要把java代码转换成字节码&#xff08;class 文件&#xff09;&#xff0c; JVM 首先需要把字节码通过一定的 方式 类加…

文件怎么加密?文件加密软件哪个好用?

在数字化生活和工作中&#xff0c;文件安全已成为不容忽视的话题。 为了保护个人隐私和企业敏感数据不被非法访问或泄露&#xff0c;文件加密成为了不可或缺的手段。 本文将介绍文件加密的基本概念、加密方法以及推荐几款好用的文件加密软件&#xff0c;帮助您为重要文件穿上“…

捋一捋C++中的逻辑运算(一)——表达式逻辑运算

注意&#xff0c;今天要谈的逻辑运算是C语言编程中的“与或非”逻辑运算&#xff0c;不是数学集合中的“交并补”逻辑运算。而编程中的逻辑运算又包括表达式逻辑运算和位逻辑运算&#xff0c;本章介绍表达式逻辑运算&#xff0c;下一章介绍位逻辑运算。 目录 一、几个基本的概…

视频号上怎么卖货?需要直播,还有粉丝吗?一篇文章带你了解!

大家好&#xff0c;我是电商糖果 关于在视频号上卖货&#xff0c;这是大家最常提起的话题。 大家之所以对视频号卖货感兴趣&#xff0c;主要原因还是抖音卖货火起来了。 而视频号是和抖音处于同一个赛道&#xff0c;这两年也在往电商方向发力。 所以大家对视频号推出电商平…

Window11端口开放防火墙

&#xff08;1&#xff09;打开控制面板&#xff0c;进入【控制面板\系统和安全\Windows Defender 防火墙】 &#xff08;2&#xff09;点击左侧菜单【高级设置】&#xff0c;进入防火墙设置页面 &#xff08;3&#xff09;根据需要选择【入站规则】或者【出站规则】&#xff…