Flask 快速入门

引言

Flask 是一个轻量级的Web框架,以简洁和灵活而著称。它提供了构建Web应用所需的基本工具,同时保持了足够的可扩展性,使其成为初学者和有经验的开发人员的首选。本系列专栏将带领大家逐步深入学习 Flask,从最基础的概念开始,逐步进阶至更高级的主题。

为什么选择 Flask

  1. 轻量级和简单: Flask 的设计理念是保持简单,使开发者能够专注于应用的逻辑而不被过多的框架代码干扰。

  2. 灵活性: Flask 是一个微框架,提供了基础的工具,但允许你根据项目的需要选择和集成其他库和工具。

  3. 易学易用: Flask 的文档清晰,社区活跃,对于初学者来说,是学习Web开发的绝佳选择。

前置准备:虚拟环境

虚拟环境是Python项目中推荐的一种良好实践,它使项目的依赖隔离开来。在终端中执行以下命令安装虚拟环境工具:

官方推荐:pipenv

pipenv 是一个用于 Python 项目的依赖管理工具,它结合了 pipvirtualenvpyenv 的功能,提供了更简洁、一致的工作流。

  • 安装 pipenv
pip install pipenv
  • 创建虚拟环境并安装依赖
  1. 进入你的项目目录,并运行以下命令:
cd your_project_directory
pipenv install

这将会创建一个新的虚拟环境,并在项目根目录下生成 PipfilePipfile.lock 文件。

  1. 如果你有一个 requirements.txt 文件,也可以使用以下命令:
pipenv install -r requirements.txt
  • 进入虚拟环境
pipenv shell

终端提示符会变成虚拟环境的名称,表示已经在虚拟环境中。

  • 安装新的依赖
pipenv install package_name

这将自动更新 Pipfile 文件,并将依赖项添加到 Pipfile.lock

  • 退出虚拟环境
exit
  • 其他常用命令
# 查看虚拟环境中安装的包
pipenv graph# 卸载依赖
pipenv uninstall package_name# 查看虚拟环境路径
pipenv --venv# 查看 Python 解释器路径
pipenv --py# 检查安全性漏洞
pipenv check
  • 使用 Pipfile 和 Pipfile.lock

Pipfile 文件用于指定项目的依赖关系,而 Pipfile.lock 文件用于确保项目的每次构建使用相同的依赖版本。这两个文件是配套使用的,Pipfile.lock 不需要手动编辑。

在团队合作时,你可以将 PipfilePipfile.lock 文件一同提交到版本控制系统,确保每个人都使用相同的依赖环境。

Pipfile 示例:

[[source]]
url = "https://pypi.org/simple"
verify_ssl = true
name = "pypi"[dev-packages][packages]
requests = "*"
flask = "*"[requires]
python_version = "3.8"

Pipfile.lock 示例:

{"_meta": {"requires": {"python_version": "3.8"},"sources": [{"name": "pypi","url": "https://pypi.org/simple","verify_ssl": true}]},"default": {"flask": {"hashes": ["sha256:abc123..."],"version": "==1.0.2"},"requests": {"hashes": ["sha256:def456..."],"version": "==2.25.1"}}
}

pipenv 简化了 Python 项目的依赖管理,提供了一种更清晰和一致的方式来定义和安装依赖。

其他:venv

venv 是 Python 自带的用于创建虚拟环境的工具。

    1. 创建虚拟环境

打开终端或命令提示符,然后移动到你项目的目录中。运行以下命令来创建一个名为 myenv 的虚拟环境:

python3 -m venv myenv

这将在当前目录下创建一个名为 myenv 的虚拟环境。

    1. 激活虚拟环境

激活虚拟环境可以确保你在该环境中执行的 Python 脚本使用该虚拟环境的解释器和包。在终端中运行以下命令激活虚拟环境:

  • Windows:
myenv\Scripts\activate
  • Linux/Mac:
source myenv/bin/activate

激活后,你的命令提示符会显示虚拟环境的名称(例如,(myenv)),表示你当前在虚拟环境中。

    1. 在虚拟环境中安装包

在虚拟环境中,你可以使用 pip 安装任何你需要的包,而这些包将仅对当前虚拟环境可见。

pip install package_name
    1. 运行 Python 脚本

在虚拟环境中,你可以运行 Python 脚本,而这些脚本将使用虚拟环境中的 Python 解释器和安装的包。

python your_script.py
    1. 退出虚拟环境

当你完成工作时,可以使用以下命令退出虚拟环境:

deactivate
  • 注意事项:

虚拟环境的名称和目录结构是可以自定义的,上述命令中的 myenv 只是一个示例。
在虚拟环境中,你可以使用 pip freeze 命令生成 requirements.txt 文件,以便记录项目的依赖关系。
为了便于项目迁移,最好将虚拟环境放在项目目录之外,例如创建一个名为 venv 的目录,并将虚拟环境放在其中。

使用 venv 虚拟环境可以确保项目有独立的 Python 运行环境,防止包冲突和版本问题。

quick start

步骤 1: 创建 Flask 应用

创建一个新的目录,进入该目录,并在其中创建一个名为 app.py 的文件。

mkdir my_flask_app
cd my_flask_app
touch app.py

步骤 2: 安装 Flask

进入虚拟环境,然后安装flask

pip install flask

步骤 3: 编写第一个 Flask 应用

app.py 文件中编写以下代码:

from flask import Flaskapp = Flask(__name__)@app.route('/')
def hello():return 'Hello, Flask!'if __name__ == '__main__':app.run(debug=True)

步骤 4: 运行 Flask 应用

在终端运行应用:

python app.py

你将看到输出提示,表明 Flask 应用正在运行。在浏览器中访问 http://localhost:5000/,将看到 “Hello, Flask!”。

步骤 5: 使用模板引擎

Flask 使用 Jinja2 作为模板引擎。让我们添加一个简单的模板,以渲染 HTML 页面。

  1. my_flask_app 目录中创建一个名为 templates 的文件夹。
mkdir templates
  1. templates 文件夹中创建一个名为 index.html 的文件。
<!-- templates/index.html -->
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Flask Template Example</title>
</head>
<body><h1>{{ greeting }}</h1>
</body>
</html>
  1. 更新 app.py 文件以使用模板。
from flask import Flask, render_templateapp = Flask(__name__)@app.route('/')
def hello():return render_template('index.html', greeting='Hello, Flask with Templates!')if __name__ == '__main__':app.run(debug=True)

现在,当访问 / 路由时,Flask 将渲染 index.html 模板,并将 greeting 变量传递给模板。

步骤 6: 接受用户输入

让我们添加一个简单的表单,允许用户输入名字。

  1. 更新 templates/index.html 文件。
<!-- templates/index.html -->
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Flask Template Example</title>
</head>
<body><form method="post" action="{{ url_for('greet') }}"><label for="name">Enter your name:</label><input type="text" id="name" name="name" required><button type="submit">Greet</button></form>
</body>
</html>
  1. 更新 app.py 文件以处理表单提交。
from flask import Flask, render_template, request, redirect, url_forapp = Flask(__name__)@app.route('/')
def hello():return render_template('index.html')@app.route('/greet', methods=['POST'])
def greet():name = request.form.get('name', 'Guest')return f'Hello, {name}!'if __name__ == '__main__':app.run(debug=True)

现在,当用户在表单中输入他们的名字并点击 “Greet” 按钮时,Flask 将显示个性化的问候语。

官方文档:https://flask.palletsprojects.com/

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

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

相关文章

RH850P1X芯片学习笔记-Overview

文章目录 Outline产品列表功能框图特点Pin和引脚功能CPU系统CPUFPU浮点运算单元中断处理保护机制指令缓存Local RAMGlobal RAM处理器间通信和相互排斥机制 操作模式中断功能DMA电源供电Reset控制单元时钟控制单元CSIH-SPIMCAN看门狗计时器系统计时器GTM通用定时器模块外设互联P…

openCV在Visual Studio2019下的集成使用

文章目录 下载OpenCV工具选择合适库文件使用visual studio创建空项目测试运行运行结果 下载OpenCV工具 官网下载实在太慢&#xff0c;还老实下不下来。下面从网上找到些别人分享的一些版本&#xff08;从3.4到4.7&#xff09;放到了网盘里&#xff0c;请按需下载使用。 链接&a…

轻量封装WebGPU渲染系统示例<43>- PBR材质与阴影实(源码)

原理简介: 1. 基于rendering pass graph实现。 2. WGSL Shader 基于文件系统和宏机制动态组装。 当前示例源码github地址: https://github.com/vilyLei/voxwebgpu/blob/feature/rendering/src/voxgpu/sample/PBRShadowTest.ts 当前示例运行效果: 此示例基于此渲染系统实现&a…

Ribbon-IRule 修改负载均衡的规则

1、负载均衡规则描述 &#xff08;1&#xff09;整体关系 &#xff08;2&#xff09;规则描述 内置负载均衡规则类规则描述RoundRobinRule简单轮询服务列表来选择服务器。它是Ribbon默认的负载均衡规则。AvailabilityFilteringRule对以下两种服务器进行忽略: (1)在默认情况下&…

1-4、调试汇编程序

语雀原文链接 文章目录 1、执行过程第一步&#xff1a;源程序第二步&#xff1a;编译连接第三步&#xff1a;执行 2、DOSBox运行程序第1步 进入EDIT.EXE第2步 编写源程序第3步 编译第4步 连接第5步 执行完整过程 3、DEBUG跟踪执行过程加载程序到内存执行程序debug和源程序数字…

Python处理Point, MultiPolygon, Polygon, LineString等Geo地理形状数据

依赖库 from shapely import Polygon, Point, LineString import re自编写函数 1. 将 字符串Polygon/MultiPolygon数据 转换为 坐标数据 输入输出 调用方式&#xff1a;fork_MULTIPOLYGON_POLYGON_to_POLYGONLIST(str_polygon) 输入&#xff1a;字符串形式的Polygon/Multi…

软件平台架构设计与技术管理之道笔记

软件平台架构设计与技术管理之道笔记 认知 领导软件平台各方面的工作&#xff0c;对技术底蕴、思维模式、决策能力、工作风格、文化铸造等方面都有极高的要求&#xff0c;可以称之为“领域智慧”。认知盲区的代价是巨大的&#xff0c;“不知”比“不会”的后果更严重&#xf…

【Android】HttpURLConnection、OkHttp

WebView 已经在后台帮我们处理好了发送HTTP请求、接收服务器响应、解析返回数据&#xff0c;以及最终的页面展示这几步工作。只不过它封装得实在是太好了&#xff0c;反而使得我们不能那么直观地看出HTTP到底是如何工作的。因此&#xff0c;接下来我们通过手动发送HTTP请求的方…

探讨Unity中的动画融合技术(BlendTree)

动画在游戏和虚拟现实应用中扮演着关键的角色&#xff0c;而动画融合技术则是使角色动作更加流畅和逼真的核心。在Unity引擎中&#xff0c;我们可以使用动画混合树&#xff08;Blend Trees&#xff09;来实现这一目标。本篇技术博客将深入讨论动画融合技术的实现原理、在Unity中…

rust 包模块组织结构

一个包&#xff08;package&#xff09;可以拥有多个二进制单元包及一个可选的库单元包。随着包内代码规模的增长&#xff0c;你还可以将代码拆分到独立的单元包&#xff08;crate&#xff09;中&#xff0c;并将它作为外部依赖进行引用。 RUST提供了一系列的功能来帮助我们管…

做一个类似万师傅家政小程序需要有哪些功能?

现如今人们生活节奏不断加快&#xff0c;自然很少有时间去处理生活中的琐事&#xff0c;恰好家政维修保洁小程序开发则能给线下用户提供方便。 家政保洁小程序应该具备哪些功能&#xff1f; 1、提供家政行业资讯&#xff0c;方便用户在选择家政保洁前了解行业动态。 2、分类搜…

C 中的枚举

简要回顾 最简单的枚举是比宏稍微高级一点的东西。它们可以避免像这样做&#xff1a; #define COLOR_BLACK 0 #define COLOR_WHITE 1 #define COLOR_BLUE 2 #define COLOR_GREEN 3 #define COLOR_RED 4 你可以这样做&#xff1a; enum color {COLOR_BLACK,COLOR_WHITE,COLO…

Android wifi Enable之后扫描流程

流程框架图 通常我们在设备开启wifi之后&#xff0c;等会会自动扫描出周围的热点。 下面看下自动扫描周围热点的流程 代码流程 1. ClientModeManager.ClientModeStateMachine ClientModeStateMachine 由CMD_START 转换到StartedStateStartedState 状态机&#xff0c;在更新…

ubuntu内移除snap

ubuntu 移除snap snap 是 ubuntu 的集中式管理的软件商城&#xff0c;但在使用过程中软件更新没有很及时。ubuntu 20.04 在安装开始就有预装了 snap&#xff0c;所以我想把它移除掉&#xff0c;省出系统空间。 具体参考链接&#xff1a;https://cloud.tencent.com/developer/…

让代码变得优雅简洁的神器:Java8 Stream流式编程

原创/朱季谦 本文主要基于实际项目常用的Stream Api流式处理总结。 因笔者主要从事风控反欺诈相关工作&#xff0c;故而此文使用比较熟悉的三要素之一的【手机号】黑名单作代码案例说明。 我在项目当中&#xff0c;很早就开始使用Java 8的流特性进行开发了&#xff0c;但是一直…

关于区块链

一、区块链 区块链技术是一种去中心化、不可篡改、安全可靠的分布式账本技术&#xff0c;应用场景广泛&#xff0c;有以下几个方面的优势&#xff1a; 金融领域&#xff1a;区块链技术可以用于实现安全的数字货币交易&#xff0c;如比特币等。同时&#xff0c;区块链技术可以用…

流媒体方案之FFmpeg——实现物联网视频监控项目

目录 前言 一、FFmpeg介绍 二、FFmpeg简易理解 三、FFmpeg的重要概念 四、软硬件准备 五、移植、运行FFmpeg 六、运行FFmpeg 前言 最近想做一个安防相关的项目&#xff0c;所以跟着韦东山老师的视频来学习视频监控方案的相关知识&#xff0c;韦东山老师讲的课非常好&…

LaTex入门简明教程

文章目录 写在前面安装Texlive的安装TeXstudio 的安装 LaTex 的使用节指令图指令表指令公式指令参考文献指令引用指令TeXstudio 编译 LaTex 的 \label{} 写法建议最后 写在前面 这篇文章面向没有任何 LaTex 基础的小白&#xff0c;主要讲解了 LaTex 的安装和使用。读完文章之后…

enum 枚举类型

我们可以通过定义枚举IpAddrKind来表达这样的概念&#xff0c;声明该枚举需要列举出所有可能的IP地址种类&#xff0c;也就是所谓的枚举变体&#xff08;variant&#xff09;。 enum IpAddrKind {V4,V6, }枚举的变体全部位于其标识符的命名空间中&#xff0c;并使用两个冒号来…

android https 证书过期

有的时候 我们android https 证书过期 &#xff0c;或者使用明文等方式去访问服务器 可能会碰到类似的 问题 &#xff1a; javax.net.ssl.SSLHandshakeException: Chain validation failed java.security.cert.CertPathValidatorException: Response is unreliable: its validi…