【100天精通python】Day49:python web编程_web框架,Flask的使用

目录

1 Web 框架

2 python 中常用的web框架

3 Flask 框架的使用

3.1 Flask框架安装

3.2 第一个Flask程序

3.3 路由

3.3.1 基本路由

3.3.2 动态路由

3.3.3 HTTP 方法

3.3.4 多个路由绑定到一个视图函数

3.3.5 访问URL 参数的路由

3.3.6 带默认值的动态路由

3.3.7 带不同数据类型的动态路由

3.4 静态文件

3.5 模版


1 Web 框架

        Web 框架(Web Framework)是一种软件工具集,旨在简化和加速 Web 应用程序的开发过程。它提供了一组预先设计好的模块、函数、类和工具,帮助开发者更轻松地构建和维护功能丰富的 Web 应用程序。通过使用 Web 框架,开发者可以避免从头开始编写大量的重复性代码,从而集中精力处理业务逻辑和应用程序的核心功能。

Web 框架的功能如下:

  1. 路由和 URL 处理: Web 框架通常提供路由功能,允许开发者将不同的 URL 映射到相应的处理函数或视图上。这使得 URL 结构更加清晰,能够轻松处理不同的请求。

  2. 模板引擎: 模板引擎允许开发者将 HTML 和动态数据结合起来,以生成动态的 Web 页面。它们通常提供条件语句、循环、变量替换等功能,帮助开发者有效地生成页面内容。

  3. 数据库交互: Web 框架通常提供数据库抽象层,简化了与数据库的交互。这使开发者能够更轻松地执行数据库查询、插入、更新和删除操作。

  4. 表单处理: Web 应用程序中经常需要处理用户提交的表单数据。Web 框架通常提供机制来验证表单数据、处理提交并生成响应。

  5. 会话管理: 许多 Web 应用程序需要跟踪用户的会话状态。Web 框架通常提供会话管理功能,以便开发者可以方便地管理用户会话和状态。

  6. 促进代码重用

2 python 中常用的web框架

        在Python中,有很多常用的Web框架可供选择。以下是一些常见的Python Web框架:

1. Flask:Flask是一个微型的、灵活的Web框架,它具有简洁的语法和强大的扩展能力。它非常适合构建小型的、轻量级的应用程序。

2. Django:Django是一个全功能的Web框架,它提供了许多开箱即用的功能,如数据库ORM、用户认证、缓存等。Django的设计理念是“松散耦合”的组件,使得开发过程更高效。

3. Pyramid:Pyramid是一个轻量级的Web框架,它注重灵活性和可扩展性。它使用了一种类似于插件的机制,使得开发者可以选择性地增加或删除框架的功能。

4. Bottle:Bottle是一个小巧且容易上手的Web框架,它具有最少的依赖关系,并且只有一个单独的源文件。Bottle非常适合构建小型的、快速的应用程序。

5. Tornado:Tornado是一个高性能的Web框架,它采用了非阻塞式I/O和事件驱动的方式来处理请求。Tornado适合处理高并发的情况,例如聊天应用程序和实时数据推送。

3 Flask 框架的使用

3.1 Flask框架安装

        Flask 依赖两个外部库:Werkzeug 和 Jinja2。Werkzeug是一个WSGI工具集,Jinja2 负责渲染模板。本文以在annconda创建的虚拟环境下安装,如下命令:

pip install flask

如下 

(venv) PS D:\python365> pip install flask
Collecting flaskDownloading flask-2.3.3-py3-none-any.whl (96 kB)---------------------------------------- 96.1/96.1 kB 365.4 kB/s eta 0:00:00
Collecting importlib-metadata>=3.6.0Downloading importlib_metadata-6.8.0-py3-none-any.whl (22 kB)
Requirement already satisfied: Jinja2>=3.1.2 in d:\python365\venv\lib\site-packages (from flask) (3.1.2)
Collecting coloramaDownloading colorama-0.4.6-py2.py3-none-any.whl (25 kB)
Requirement already satisfied: zipp>=0.5 in d:\python365\venv\lib\site-packages (from importlib-metadata>=3.6.0->flask) (3.16.2)
Requirement already satisfied: MarkupSafe>=2.0 in d:\python365\venv\lib\site-packages (from Jinja2>=3.1.2->flask) (2.1.3)
Installing collected packages: Werkzeug, itsdangerous, importlib-metadata, colorama, blinker, click, flask
Successfully installed Werkzeug-2.3.7 blinker-1.6.2 click-8.1.7 colorama-0.4.6 flask-2.3.3 importlib-metadata-6.8.0 itsdangerous-2.1.2[notice] A new release of pip available: 22.3.1 -> 23.2.1
[notice] To update, run: python.exe -m pip install --upgrade pip
(venv) PS D:\python365>

3.2 第一个Flask程序

安装完成后,编写第一个Flask程序。下面是一个简单的 Flask 程序示例,它创建一个最基本的 Web 应用,并在访问特定 URL 时返回 "Hello, Flask!" 的消息:

from flask import Flask# 创建 Flask 应用实例
app = Flask(__name__)# 定义路由和视图函数
@app.route('/')
def hello():return "Hello, Flask!"# 如果这个文件是作为主程序运行,则执行下面的代码
if __name__ == '__main__':app.run(debug=True)

输出如下:

e79209d5762a41fdab5d3537d54c6623.png

在浏览器输入网址:http://127.0.0.1:5000,如下:

911b746ab006476cb35b177f9357c22b.png

 以上代码是使用Python的Flask框架创建一个简单的Web应用。

        首先,需要导入Flask库。然后,创建一个Flask应用实例,以当前模块的名称作为参数,即 ​__name__​。

        接下来,使用装饰器 ​@app.route('/')​定义路由,即指定URL路径。在这个例子中,根路径'/'表示应用程序的默认页面。

        然后,定义一个视图函数 ​hello()​,它会在用户访问根路径时被调用。这个函数返回一个字符串"Hello, Flask!",作为响应给用户。

        最后,通过 ​app.run()​方法运行应用程序,开启一个本地服务器,监听HTTP请求并返回相应的结果。设置 ​debug=True​可以启用调试模式。

        若你运行这个文件作为主程序,将执行 ​app.run()​语句,启动应用程序,并在终端输出调试信息。

3.3 路由

      在 Flask 中,路由用于将特定的 URL 路径与相应的视图函数关联起来。路由决定了当用户访问不同的 URL 时,应该执行哪个视图函数来处理请求。使用装饰器 @app.route() 可以定义路由。

下面是一些不同情况下的路由定义示例:

3.3.1 基本路由

from flask import Flaskapp = Flask(__name__)@app.route('/')
def index():return "Welcome to the homepage!"

         在这个示例中,当用户访问根路径 / 时,会调用名为 index() 的视图函数,并返回 "Welcome to the homepage!" 的消息。

3.3.2 动态路由

        你可以在路由中使用变量部分,用于捕获 URL 中的不同值。这些变量将作为参数传递给视图函数。

@app.route('/user/<username>')
def show_user_profile(username):return f"User: {username}"

在这个示例中,当用户访问类似 /user/johndoe 的路径时,show_user_profile() 视图函数将会被调用,参数 username 将接收值 "johndoe"

3.3.3 HTTP 方法

你可以通过指定不同的 HTTP 方法来处理不同的请求,如 GET、POST、PUT、DELETE 等。

@app.route('/submit', methods=['POST'])
def submit_form():return "Form submitted successfully!"

        这个示例中,只有当用户使用 POST 方法访问 /submit 路径时,才会调用 submit_form() 视图函数。

常见的HTTP方法及说明:

bbe5163800064ec4baf9df3e75c635a9.png

3.3.4 多个路由绑定到一个视图函数

你可以将多个不同的路径绑定到同一个视图函数,以提供更多的访问选项。

@app.route('/')
@app.route('/home')
@app.route('/index')
def homepage():return "Welcome to the homepage!"

这里,无论用户访问根路径 //home 还是 /index,都会调用 homepage() 视图函数。

3.3.5 访问URL 参数的路由

        你可以在视图函数中访问 URL 参数,这些参数会被 Flask 自动解析并传递给视图函数。

from flask import request@app.route('/profile')
def user_profile():username = request.args.get('username')return f"User profile: {username}"

     示例代码定义了一个路由 /profile,当用户访问该路径时,会调用名为 user_profile() 的视图函数。在这个视图函数中,使用了 request 对象来获取 URL 参数 username 的值,然后返回一个包含用户名的消息。

3.3.6 带默认值的动态路由

@app.route('/user/<username>/<int:age>')
def user_profile(username, age=18):return f"User: {username}, Age: {age}"

 在这个示例中,age 参数具有默认值 18。这意味着你可以通过 /user/johndoe 访问,而不仅仅是 /user/johndoe/25

3.3.7 带不同数据类型的动态路由

@app.route('/item/<int:item_id>')
def get_item(item_id):return f"Item ID: {item_id}"

        这里,item_id 只会匹配整数类型的值,如果访问 /item/123,那么 item_id 将被传递为整数 123。

这些是一些常见情况下的路由定义示例。通过合理定义路由,你可以构建出逻辑清晰且易于访问的 Web 应用程序。注意,路由定义应该在 @app.route() 装饰器下面紧接着是对应的视图函数定义。

3.4 静态文件

        在 Flask 中,静态文件是指不需要动态生成的资源,如样式表、JavaScript 文件、图像等。这些文件不会在每次请求时都由服务器生成,而是直接返回给客户端浏览器。Flask 提供了专门的路由和配置来处理静态文件。

        默认情况下,Flask 在应用根目录下创建一个名为 static 的文件夹,用于存放静态文件。你可以在其中创建子文件夹来组织不同类型的静态资源,例如 static/css 用于存放样式表,static/js 用于存放 JavaScript 文件。

以下是如何在 Flask 中处理静态文件的基本步骤:

  1. 在项目根目录下创建一个 static 文件夹,用于存放静态文件。在其中可以创建子文件夹来组织不同类型的静态资源,例如 static/cssstatic/js

  2. 使用 url_for() 函数来生成静态文件的 URL。这个函数会根据配置生成正确的 URL,确保正确地访问到静态文件。

下面是一个简单的示例,演示如何在 Flask 中处理静态文件:

from flask import Flask, render_template, url_forapp = Flask(__name__)@app.route('/')
def index():return render_template('index.html')if __name__ == '__main__':app.run()

在这个示例中,render_template('index.html') 函数用于渲染模板,而模板中可能需要加载静态文件。例如,在模板中加载样式表:

<!DOCTYPE html>
<html>
<head><title>Flask Static Files</title><link rel="stylesheet" href="{{ url_for('static', filename='css/style.css') }}">
</head>
<body><h1>Hello, Flask!</h1>
</body>
</html>

         在这个例子中,url_for('static', filename='css/style.css') 生成了正确的静态文件 URL。'static' 是 Flask 中默认的静态文件目录,'css/style.css' 是相对于该目录的路径。

        确保在模板中使用 url_for() 来生成静态文件的 URL,以便在不同的环境中都能正确访问到这些文件。这样,你就可以在 Flask 应用中有效地处理静态文件了。

3.5 模版

        在 Flask 中,模板用于将动态数据渲染到 HTML 页面中,实现页面内容的动态生成。Flask 集成了 Jinja2 模板引擎,让你可以在 HTML 中嵌入 Python 代码来渲染数据。这种方式使得业务逻辑和界面分离,提高了代码的可维护性。

以下是在 Flask 中使用模板的基本步骤:

  1. 在项目根目录下创建一个名为 templates 的文件夹,用于存放模板文件。这些模板文件可以使用 Jinja2 语法。

  2. 在视图函数中使用 render_template() 函数来渲染模板并传递数据。

  3. 在模板中使用 Jinja2 语法来嵌入动态内容和控制结构。

下面是一个简单的示例,演示如何在 Flask 中使用模板:

  1. 创建一个名为 templates 的文件夹,并在其中创建一个名为 index.html 的模板文件。

templates/index.html 文件内容:

<!DOCTYPE html>
<html>
<head><title>Flask Template Example</title>
</head>
<body><h1>Hello, {{ name }}!</h1><p>Today is {{ date }}</p>
</body>
</html>

创建一个 Flask 应用,使用 render_template() 函数来渲染模板并传递数据。

from flask import Flask, render_template
import datetimeapp = Flask(__name__)@app.route('/')
def index():current_date = datetime.datetime.now()return render_template('index.html', name='Flask User', date=current_date)if __name__ == '__main__':app.run()

    在这个示例中,render_template('index.html', name='Flask User', date=current_date) 渲染了 index.html 模板,并传递了 namedate 变量。在模板中,你可以使用 {{ variable_name }} 来插入动态内容。 在浏览器中访问应用的根路径,你应该会看到页面显示 "Hello, Flask User!" 和当前日期。

        这只是一个简单的 Flask 模板示例,你可以在模板中使用更多的 Jinja2 功能,如条件语句、循环、过滤器等,来构建更复杂的动态页面。

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

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

相关文章

文件读取漏洞复现(Metinfo 6.0.0)

安装环境 安装phpstudy&#xff0c;下载MetInfo 6.0.0版本软件&#xff0c;复制到phpstudy目录下的www目录中。 打开phpstudy&#xff0c;访问浏览器127.0.0.1/MetInfo6.0.0/install/index.php&#xff0c;打开Meinfo 6.0.0主页&#xff1a; 点击下一步、下一步&#xff0c…

深入理解css3背景图边框

border-image知识点 重点理解 border-image-slice 设置的值将边框背景图分为9份&#xff0c;图像中间的舍弃&#xff0c;其他部分图像对应边框的相应区域放置&#xff0c;上右下左四角固定&#xff0c;border-image-repeat设置的是除四角外其他部分的显示方式。 截图来自菜鸟教…

【锁】定时任务推送数据-redission加锁实例优化

文章目录 redission 加锁代码-有问题优化代码看门狗是什么&#xff1f; redission 加锁代码-有问题 /*** 收货入库物料标签(包装码)推送接口** throws Exception*/public void synReceiveMaterialTags() throws Exception {String tag DateFormatUtils.format(new Date(), &qu…

spring事务详解

spring事务整体流程&#xff08;图画的不是很细节&#xff0c;但是大体流程体现出来了&#xff09; 一、EnableTransactionManagement工作原理 开启Spring事务本质上就是增加了一个Advisor&#xff0c;但我们使用EnableTransactionManagement注解来开启Spring事务是&#xff…

设计模式-迭代器

文章目录 1. 引言1.1 概述1.2 设计模式1.3 迭代器模式的应用场景1.4 迭代器模式的作用 2. 基本概念2.1 迭代器 Iterator2.2 聚合 Aggregate2.3 具体聚合 ConcreteAggregate 3. Java 实现迭代器模式3.1 Java 集合框架3.2 Java 迭代器接口3.3 Java 迭代器模式实现示例 4. 迭代器模…

打破数据孤岛!时序数据库 TDengine 与创意物联感知平台完成兼容性互认

新型物联网实现良好建设的第一要务就是打破信息孤岛&#xff0c;将数据汇聚在平台统一处理&#xff0c;实现数据共享&#xff0c;放大物联终端的行业价值&#xff0c;实现系统开放性&#xff0c;以此营造丰富的行业应用环境。在此背景下&#xff0c;物联感知平台应运而生&#…

BOM对MES管理系统的影响与作用

在建设MES管理系统中&#xff0c;BOM&#xff08;物料清单&#xff09;具有至关重要的作用。它提供了产品的组成部分和结构信息&#xff0c;支持生产过程的监控、协调和管理。本文将详细探讨BOM在MES管理系统中的影响和作用。 一、生产过程指导 BOM为MES系统提供了产品的组成部…

centos中得一些命令 记录

redis命令 链接redis数据库的命令 redis-cli如果 Redis 服务器在不同的主机或端口上运行&#xff0c;你需要提供相应的主机和端口信息。例如&#xff1a; redis-cli -h <hostname> -p <port>连接成功后&#xff0c;你将看到一个类似于以下的提示符&#xff0c;表…

哪吒汽车“三头六臂”之「浩智电驱」

撰文 / 翟悦 编审 / 吴晰 8月21日&#xff0c;在哪吒汽车科技日上&#xff0c;哪吒汽车发布“浩智战略2025”以及浩智技术品牌2.0。根据公开信息&#xff0c;主编梳理了以下几点&#xff1a;◎浩智滑板底盘支持400V/800V双平台◎浩智电驱包括180kW 400V电驱系统和250kW 800…

Ansible学习笔记5

copy模块&#xff1a;&#xff08;重点&#xff09; copy模块用于对文件的远程拷贝&#xff08;如把本地的文件拷贝到远程主机上。&#xff09; 在master的主机上准备一个文件&#xff0c;拷贝文件到group1的所有主机上。 这个用的频率非常高&#xff0c;非常有用的一个模块…

简单聊聊Https的来龙去脉

简单聊聊Https的来龙去脉 Http 通信具有哪些风险Https Http SSL/TLS对称加密 和 非对称加密数字证书数字证书的申请数字证书怎么起作用 Https工作流程一定需要Https吗&#xff1f; Http 通信具有哪些风险 使用明文通信&#xff0c;通信内容可能会被监听不验证通信双方身份&a…

lnmp架构-mysql2

4.mysql 组复制集群 首先对所有的节点重新初始化 因为对节点的数据一致性要求非常高 主从复制的时候 slave只会复制master的binlog日志 就是二进制日志 不会复制relay_log 在server1上 根据实际情况修改主机名和网段 log_slave_updateON 意思就是 当slave的sql线程做完之后…

【docker】docker的一些常用命令-------从小白到大神之路之学习运维第92天

目录 一、安装docker-ce 1、从阿里云下载docker-cer.epo源 2、下载部分依赖 3、安装docker 二、启用docker 1、启动docker和不启动查看docker version 2、启动服务查看docker version 有什么区别&#xff1f;看到了吗&#xff1f; 3、看看docker启动后的镜像仓库都有什…

趣味微项目:玩转Python编程,轻松学习快乐成长!

&#x1f482; 个人网站:【工具大全】【游戏大全】【神级源码资源网】&#x1f91f; 前端学习课程&#xff1a;&#x1f449;【28个案例趣学前端】【400个JS面试题】&#x1f485; 寻找学习交流、摸鱼划水的小伙伴&#xff0c;请点击【摸鱼学习交流群】 在学习Python编程的旅程…

【防火墙】防火墙NAT Server的配置

Web举例&#xff1a;公网用户通过NAT Server访问内部服务器 介绍公网用户通过NAT Server访问内部服务器的配置举例。 组网需求 某公司在网络边界处部署了FW作为安全网关。为了使私网Web服务器和FTP服务器能够对外提供服务&#xff0c;需要在FW上配置NAT Server功能。除了公网…

计算机毕设之基于python+echarts+mysql的图书馆可视化管理系统(文档+代码+部署教程)

系统阐述的是一款图书馆可视化管理系统的设计与实现&#xff0c;对于Python、B/S结构、MySql进行了较为深入的学习与应用。主要针对系统的设计&#xff0c;描述&#xff0c;实现和分析与测试方面来表明开发的过程。开发中使用了 django框架和MySql数据库技术搭建系统的整体架构…

WordPress主题Zing V2.2.1/模块化WordPress响应式通用企业商城主题

WordPress主题Zing V2.2.1&#xff0c;模块化WordPress响应式通用企业商城主题。 功能介绍 百度熊掌号文章实时推送、原创保护 多设备支持自适应布局&#xff0c;支持电脑、Pad、手机以及各种浏览器 SEO优化首页、文章、页面、分类均支持自定义标题、关键字和描述 速度优化…

通过参数化可变形曲线直接从 X 射线投影数据计算分割研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

macOS Sonoma 14beta 7(23A5337a)更新发布,附黑/白苹果系统镜像

系统介绍&#xff08;镜像请前往黑果魏叔官网下载&#xff09; 黑果魏叔8 月 31 日消息&#xff0c;苹果今日向 Mac 电脑用户推送了 macOS 14 开发者预览版 Beta 7 更新&#xff08;内部版本号&#xff1a;23A5337a&#xff09;&#xff0c;本次更新距离上次发布隔了 8 天。 …

科技云报道:AI+云计算共生共长,能否解锁下一个高增长空间?

科技云报道原创。 在过去近一年的时间里&#xff0c;AI大模型从最初的框架构建&#xff0c;逐步走到落地阶段。 然而&#xff0c;随着AI大模型深入到千行百业中&#xff0c;市场开始意识到通用大模型虽然功能强大&#xff0c;但似乎并不能完全满足不同企业的个性化需求。 大…