从零开始学Flask: 3分钟用Python快速构建Web应用

news2024/9/21 22:35:10

文章目录

    • 一、背景
    • 二、安装&基础使用
            • 1. 安装 Flask
            • 2. 创建 Flask 应用
            • 3. 路由解析
            • 4. 模板渲染
            • 5. 请求和响应处理
    • 三、Demo项目实战

一、背景

什么是Flask?Flask 是一个轻量级的 Python Web 应用框架,因其简单易用、灵活性高等特点,可以帮助开发者快速构建小型应用和个人项目,被广泛用于开发各种 Web 应用,包括博客、社交网络、电子商务网站等。Flask 框架具有以下优点:

  • 简单易用。Flask 框架的设计目标是保持简单易用,它提供了最基本的 Web 开发功能,使得开发者可以快速上手并迅速构建 Web 应用。
  • 灵活性高。Flask 框架的灵活性非常高,可以与多种第三方库和工具进行集成,如
    ORM、数据库、模板引擎等,使得开发者可以根据自己的需求选择最适合的工具。
  • 轻量级。Flask 框架是一个轻量级框架,其代码量非常少,性能也非常好,适合用于构建小型应用和个人项目。
  • 社区活跃。Flask 框架有一个庞大的社区,开发者可以从社区中获得大量的支持和资源,使得开发工作更加高效。

二、安装&基础使用

1. 安装 Flask

在开始使用 Flask 之前,需要先安装 Flask 模块。可以通过 pip 工具来进行安装,如下所示:

pip install Flask
2. 创建 Flask 应用

在使用 Flask 开发 Web 应用前,需要先创建一个 Flask 应用。创建 Flask 应用很简单,只需要在 Python 文件中导入 Flask 模块,并创建一个 Flask 实例即可。如下所示:

from flask import Flask
app = Flask(__name__)

这个应用实例是我们构建 Flask Web 应用的基础。其中 name 参数是 Python 自带的变量,表示当前模块的名称,Flask 会使用这个参数来决定应用的根目录,以便稍后能够找到静态文件等资源。

3. 路由解析

在 Flask 应用中,路由解析是处理客户端请求的重要步骤。Flask 通过装饰器的方式来实现路由解析,将客户端请求的 URL 映射到对应的处理函数上。例如,下面的代码定义了一个简单的路由:

@app.route('/')
def index():
    return 'Hello, World!'

这个路由将客户端请求的根路径 / 映射到了 index 函数上,当用户在浏览器中访问应用时,会看到页面上显示 Hello, World! 的文本。

4. 模板渲染

在 Flask 应用中,模板是生成动态 Web 页面的基础。Flask 通过 Jinja2 模板引擎提供了模板渲染的功能。在 Flask 应用中,需要先定义模板,然后将模板与数据进行绑定并渲染。例如,下面的代码展示了如何使用模板渲染功能:

from flask import render_template

@app.route('/hello/<name>')
def hello(name):
    return render_template('hello.html', name=name)

这个路由将客户端请求的路径 /hello/ 映射到了 hello 函数上,这个函数会将 name 参数传递给模板 hello.html,并调用 render_template 函数来渲染模板。

5. 请求和响应处理

在 Flask 应用中,请求和响应处理是最常见的操作之一。Flask 提供了多种处理请求和响应的方式,如获取请求参数、设置响应头、返回 JSON 数据等。例如,下面的代码展示了如何处理客户端的 POST 请求,并返回 JSON 数据:

from flask import request, jsonify

@app.route('/api/add', methods=['POST'])
def add():
    a = int(request.form['a'])
    b = int(request.form['b'])
    result = a + b
    return jsonify({'result': result})

这个路由将客户端请求的路径 /api/add 映射到了 add 函数上,这个函数从请求中获取 a 和 b 参数,计算它们的和,并使用 Flask 提供的 jsonify 函数将结果以 JSON 格式返回给客户端。

三、Demo项目实战

接下里我们就用Flask框架来快速开发一个Demo网站,网站需求是:在网页上输入用户名,点击提交,然后网页上返回欢迎用户的欢迎语。这样的一个Demo网站需求,只需要简单的几行代码即可实现。

1、在 Python 文件中导入 Flask 模块,并创建一个 Flask 应用实例。代码如下:

from flask import Flask, request

app = Flask(__name__)

2、接下来,可以使用装饰器 @app.route 来定义路由,并编写处理 GET 和 POST 请求的视图函数。代码如下:

@app.route('/', methods=['GET', 'POST'])
def index():
    if request.method == 'POST':
        name = request.form['name']
        return 'Hello, {}!'.format(name)
    else:
        return '''
            <form method="post">
                <label for="name">Enter your name:</label>
                <input type="text" id="name" name="name">
                <button type="submit">Submit</button>
            </form>
        '''

这个路由将客户端请求的根路径 / 映射到了 index 函数上,这个函数会根据请求的方法来处理 GET 和 POST 请求。当请求方法为 POST 时,从表单中获取用户输入的姓名,并返回一个包含问候语的字符串;当请求方法为 GET 时,返回一个 HTML 表单,让用户输入姓名。

3、最后,需要使用 app.run() 函数来运行 Flask 应用。代码如下:

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

4、完整的代码如下:

from flask import Flask, request

app = Flask(__name__)

@app.route('/', methods=['GET', 'POST'])
def index():
    if request.method == 'POST':
        name = request.form['name']
        return 'Hello, {}!'.format(name)
    else:
        return '''
            <form method="post">
                <label for="name">Enter your name:</label>
                <input type="text" id="name" name="name">
                <button type="submit">Submit</button>
            </form>
        '''

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

5、运行程序:

在这里插入图片描述
6、在浏览器中访问 http://127.0.0.1:5000/ ,通过GET请求来访问这个应用:

在这里插入图片描述
根据提示输入姓名,点击Submit按钮,调用POST请求,会返回一个包含问候语的字符串:

在这里插入图片描述
试想一下,同样是上面的这个需求,如果用Django来实现,甚至用Java来实现,是不是要写的代码会多得多?这就是flask框架被广泛用于小型应用和个人项目的原因:轻量、快捷!

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

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

相关文章

Ribbon源码

学了feign源码之后感觉&#xff0c;这部分还是按运行流程分块学合适。核心组件什么的&#xff0c;当专业术语学妥了。序章&#xff1a;认识真正のRibbon 但只用认识一点点 之前我们学习Ribbon的简单使用时&#xff0c;都是集成了Eureka-client或者Feign等组件&#xff0c;甚至在…

better scoll右 联左

这是先拿一个数组装进我们所有 获取到的dom节点的 高度 因为算的 都是 到最上面的 高度&#xff0c;所以我们 要减去他的 高度 就得到自身的高度 然后给右边加一个滚动事件&#xff0c;得到每一次滑动的高度&#xff0c;在循环上面的数组&#xff0c;就是我们右边的 y就在算出…

如何排查 IDEA 自身报错?| 以 IntelliJ IDEA 2023.1.4 无法刷新项目 Maven 模块的问题为例

这个问题是 2023 年 7 月 26 日遇到的&#xff0c;当时还是 IDEA 2023.1.4&#xff0c;结果文章还没写完&#xff0c;7 月 27 日自动给更新了 IDEA 2023.2。问题估计解决了。 所以&#xff0c;本文就简单提一下 IDEA 自身报错的排查方法。 规避/解决方式 先说问题怎么处理&am…

重生之我要学C++第五天

这篇文章主要内容是构造函数的初始化列表以及运算符重载在顺序表中的简单应用&#xff0c;运算符重载实现自定义类型的流插入流提取。希望对大家有所帮助&#xff0c;点赞收藏评论&#xff0c;支持一下吧&#xff01; 目录 构造函数进阶理解 1.内置类型成员在参数列表中的定义 …

糟了,数据库主从延迟了!

前言 在实际的生产环境中&#xff0c;由单台MySQL作为独立的数据库是完全不能满足实际需求的&#xff0c;无论是在安全性&#xff0c;高可用性以及高并发等各个方面 因此&#xff0c;一般来说都是通过集群主从复制&#xff08;Master-Slave&#xff09;的方式来同步数据&…

【点云处理教程】05-Python 中的点云分割

一、说明 这是我的“点云处理”教程的第 5 篇文章。“点云处理”教程对初学者友好&#xff0c;我们将在其中简单地介绍从数据准备到数据分割和分类的点云处理管道。 在上一教程中&#xff0c;我们看到了如何过滤点云以减少噪声或其密度。在本教程中&#xff0c;我们将应用一些聚…

LeetCode_11. 盛最多水的容器

题目描述 11. 盛最多水的容器 - 力扣&#xff08;LeetCode&#xff09;https://leetcode.cn/problems/container-with-most-water/ 思路分析 这题就是典型的是一道很经典的面试题&#xff0c;最优的解法是双指针&#xff0c;但很多人在第一次看到这题的时候很难想到用双指针来…

*CTF 2023 Misc

一、 snippingTools Alice在参加某个CTF比赛&#xff0c;她成功的解出了一道题&#xff0c;拿到了flag。她很开心&#xff0c;迫不及待地想要向Bob分享她的喜悦。于是按下了快捷键ShiftWinS使用了Windows 11的截图工具&#xff0c;截取了整个屏幕&#xff0c;并且保存为文件1.p…

无涯教程-jQuery - Spinner组件函数

Widget Spinner 函数可与JqueryUI中的窗口小部件一起使用。Spinner提供了一种从一组中选择一个值的快速方法。 Spinner - 语法 $( "#menu" ).selectmenu(); Spinner - 示例 以下是显示Spinner用法的简单示例- <!doctype html> <html lang"en"…

(树) 剑指 Offer 27. 二叉树的镜像 ——【Leetcode每日一题】

❓剑指 Offer 27. 二叉树的镜像 难度&#xff1a;简单 请完成一个函数&#xff0c;输入一个二叉树&#xff0c;该函数输出它的镜像。 例如输入&#xff1a; 4/ \2 7/ \ / \1 3 6 9镜像输出&#xff1a; 4/ \7 2/ \ / \9 6 3 1示例 1&#xff1a; 输…

给你一个项目,你将如何开展性能测试工作?

一、性能三连问 1、何时进行性能测试&#xff1f; 性能测试的工作是基于系统功能已经完备或者已经趋于完备之上的&#xff0c;在功能还不够完备的情况下没有多大的意义。因为后期功能完善上会对系统的性能有影响&#xff0c;过早进入性能测试会出现测试结果不准确、浪费测试资…

We are the Lights - 思维

分析&#xff1a; 每次操作会把上一次的状态覆盖&#xff0c;但是从后往前操作可以保留最后一次覆盖&#xff0c;每一个位置最后的覆盖状态一定是最终状态&#xff0c;因此可以存下来从后往前记录第一次覆盖的状态并计数。 代码&#xff1a; #include <bits/stdc.h>usi…

玩转LaTeX(一)【源文件基本结构、中文处理方法、中英文的字体字号设置、文档基本结构】

latex源文件基本结构&#xff1a; 【在latex中一般分为两个区&#xff0c;一个是导言区&#xff0c;一个是正文区&#xff08;文稿区&#xff09;】 %导言区(主要进行全局设置)%一个latex文件&#xff0c;只能有且只有一个document环境\documentclass{article} %除article类外…

OpenHarmony开源鸿蒙学习入门 - 基于3.2Release 应用开发环境安装

OpenHarmony开源鸿蒙学习入门 - 基于3.2Release 应用开发环境安装 基于目前官方master主支&#xff0c;最新文档版本3.2Release&#xff0c;更新应用开发环境安装文档。 一、安装IDE&#xff1a; 1.IDE安装的系统要求 2.IDE下载官网链接&#xff08;IDE下载链接&#xff09; …

【论文精读】Self-Attentive Assocative Memory,2020

目录 1 引言2 Outer product attention (OPA)3 Self-attentive Associative Memory (SAM)4 SAM-based Two-Memory Model (STM)4.1 M i M^i Mi写操作4.2 M r M^r Mr读操作4.3 M i M^i Mi读操作和 M r M^r Mr写操作过程4.4 用 M r M^r Mr实现item转移4.5 模型输出 o t o_t ot​…

C语言手撕顺序表

目录 一、概念 1、静态顺序表&#xff1a;使用定长数组存储元素。 2、动态顺序表&#xff1a;使用动态开辟的数组存储 二、接口实现 1、对顺序表的初始化 2、对数据的销毁 3、对数据的打印 4、检查是否需要扩容 5、尾插 6、头插 7、尾删 8、头删 9、在pos位置插入x …

数据集【NO.7】无人机航拍数据集——VisDrone2019数据集

写在前面&#xff1a;数据集对应应用场景&#xff0c;不同的应用场景有不同的检测难点以及对应改进方法&#xff0c;本系列整理汇总领域内的数据集&#xff0c;方便大家下载数据集&#xff0c;若无法下载可关注后私信领取。关注免费领取整理好的数据集资料&#xff01;本文数据…

【前端知识】React 基础巩固(四十)——Navigate导航

React 基础巩固(四十)——Navigate导航 一、Navigate的基本使用 新建Login页面&#xff0c;在Login中引入Navigate&#xff0c;实现点击登陆按钮跳转至/home路径下&#xff1a; import React, { PureComponent } from "react"; import { Navigate } from "reac…

MySQL数据库之JDBC编程(从认识到操作)

目录 前言 一.JDBC的认识 1.1JDBC的来源 1.2JDBC的概念 二.JDBC的导包 三.JDBC的四步操作 三.JDBC常用的类和方法 3.1常用类 3.2常见方法 &#x1f381;个人主页&#xff1a;tq02的博客_CSDN博客-C语言,Java,Java数据结构领域博主 &#x1f3a5; 本文由 tq02 原创&…

芯片制造详解.光刻技术与基本流程.学习笔记(四)

本篇文章是看了以下视频后的笔记提炼&#xff0c;欢迎各位观看原视频&#xff0c;这里附上地址 芯片制造详解04&#xff1a;光刻技术与基本流程&#xff5c;国产之路不容易 芯片制造详解.光刻技术与基本流程.学习笔记 四 一、引子二、光刻(1).光掩膜(2).光刻机(3).光刻胶(4).挖…