Python 之 Flask 入门学习

news2025/5/18 22:51:41

安装 Flask

在开始使用 Flask 之前,需要先安装它。可以通过 pip 命令来安装 Flask:

pip install Flask

创建第一个 Flask 应用

创建一个简单的 Flask 应用,只需要几行代码。以下是一个最基本的 Flask 应用示例:

from flask import Flask

app = Flask(__name__)

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

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

将上述代码保存为 app.py,然后在终端中运行:

python app.py

运行后,访问 http://127.0.0.1:5000/,将会看到页面上显示 “Hello, World!”。

路由和视图函数

在 Flask 中,路由是通过 @app.route() 装饰器来定义的。路由决定了当用户访问某个 URL 时,应该执行哪个视图函数。例如:

@app.route('/about')
def about():
    return 'This is the about page.'

访问 http://127.0.0.1:5000/about 将会显示 “This is the about page.”。

模板渲染

Flask 使用 Jinja2 模板引擎来渲染 HTML 页面。可以通过 render_template 函数来渲染模板。首先,在项目目录下创建一个 templates 文件夹,并在其中创建一个 index.html 文件:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Home</title>
</head>
<body>
    <h1>{{ message }}</h1>
</body>
</html>

然后在 Flask 应用中使用 render_template 来渲染这个模板:

from flask import Flask, render_template

app = Flask(__name__)

@app.route('/')
def home():
    return render_template('index.html', message='Hello, Flask!')

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

访问 http://127.0.0.1:5000/ 将会看到页面上显示 “Hello, Flask!”。

处理表单数据

Flask 可以轻松处理表单数据。以下是一个简单的表单处理示例:

from flask import Flask, request, render_template

app = Flask(__name__)

@app.route('/form', methods=['GET', 'POST'])
def form():
    if request.method == 'POST':
        name = request.form['name']
        return f'Hello, {name}!'
    return render_template('form.html')

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

templates 文件夹中创建一个 form.html 文件:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Form</title>
</head>
<body>
    <form method="POST">
        <label for="name">Name:</label>
        <input type="text" id="name" name="name">
        <button type="submit">Submit</button>
    </form>
</body>
</html>

访问 http://127.0.0.1:5000/form,填写表单并提交后,将会看到页面上显示 “Hello, [你输入的名字]!”。

静态文件

Flask 允许在 static 文件夹中存放静态文件,如 CSS、JavaScript 和图片。可以通过 url_for 函数来引用这些静态文件。例如:

<link rel="stylesheet" href="{{ url_for('static', filename='style.css') }}">

部署 Flask 应用

Flask 应用可以通过多种方式部署,例如使用 Gunicorn 或 uWSGI。以下是一个使用 Gunicorn 部署的示例:

gunicorn app:app

这将启动一个生产环境的 Flask 应用。

通过以上步骤,可以快速入门 Flask 并开始构建自己的 Web 应用。



实践项目

项目结构如下图
在这里插入图片描述
web_flask.py 源码

from flask import Flask, request, render_template, send_from_directory
import os, json

# 创建实例,设置静态资源目录,设置默认模板目录
app = Flask(__name__ ,static_folder='static' ,template_folder='templates')

# 添加额外的静态目录和对应的URL路径,访问静态资源http://127.0.0.1:5100/upload/test.txt
@app.route('/upload/<path:filename>')
def publicFiles(filename):
    return send_from_directory('upload', filename)


# 访问首页http://127.0.0.1:5100
@app.route('/')
def myIndex():
    # return "我是首页"
    return render_template('index.html')


# 获取GET请求参数http://127.0.0.1:5100/welcome?userName=我的名字 
@app.route('/welcome', methods=["GET"])
def getparam():
    userName = request.values.get("userName")
    return render_template('hello.html', name=userName)


# 接收上传文件
@app.route("/upfile", methods=["POST", "GET"])
def upfile():
    file = request.files.get("filename")
    if file is None: #表示没有发送文件
        return {
            'message': "文件上传失败"
        }

    file_name = file.filename.replace(" ","") #删除空格
    file.save(os.path.dirname(__file__)+'/upload/'+ file_name)  #保存文件
    str = f"获取上传文件的名称为:{file_name}"
    print(str)

    res =  {
        'code': 200,
        'messsge': "文件上传成功",
        'fileName': file_name,
        'url': 'http://127.0.0.1:5100/upload/' + file_name
    }
    restr = json.dumps(res, ensure_ascii=False) #防止中文显示为Unicode编码
    return restr


if __name__ == '__main__':
    app.run(host='127.0.0.1', port=5100)
  • 访问首页的效果图

在这里插入图片描述
在这里插入图片描述

index.html 模板源码

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>上传文件</title>
	</head>
	<body>
		<form action="http://127.0.0.1:5100/upfile" method="post" enctype="multipart/form-data">
		    <input type="file" name="filename" /><br>
		    <input type="submit" value="上传" />
			<input type="reset" value="取消" />
		</form>
		
		<!-- <script>
			var form = document.getElementsByTagName('form')[0];
			form.onsubmit = function(){
				var xhr = new XMLHttpRequest();
				xhr.open('post','http://127.0.0.1:5100/upfile');
				xhr.onreadystatechange = function(){
					if(xhr.readyState == 4){
						if(xhr.status == 200){}
					}
				}
			}
		</script> -->
	</body>
</html>

  • 展示get请求参数
    在这里插入图片描述
    hello.html 模板源码
<!DOCTYPE html>
<html>
<head>
    <title>Hello</title>
    <link href="../static/favicon.ico" rel="icon">
</head>
<body>
    <h1>Hello, {{ name }}!</h1>
</body>
</html>

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

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

相关文章

【Ragflow】22.RagflowPlus(v0.3.0):用户会话管理/文件类型拓展/诸多优化更新

概述 在历经三周的阶段性开发后&#xff0c;RagflowPlus顺利完成既定计划&#xff0c;正式发布v0.3.0版本。 开源地址&#xff1a;https://github.com/zstar1003/ragflow-plus 新功能 1. 用户会话管理 在后台管理系统中&#xff0c;新增用户会话管理菜单。在此菜单中&…

使用PocketFlow构建Web Search Agent

前言 本文介绍的是PocketFlow的cookbook中的pocketflow-agent部分。 回顾一下PocketFlow的核心架构&#xff1a; 每一个节点的架构&#xff1a; 具体介绍可以看上一篇文章&#xff1a; “Pocket Flow&#xff0c;一个仅用 100 行代码实现的 LLM 框架” 实现效果 这个Web S…

记录:echarts实现tooltip的某个数据常显和恢复

<template><div class"com-wapper"><div class"func-btns"><el-button type"primary" plain click"showPoint(2023)">固定显示2023年数据</el-button><el-button type"success" plain cli…

八股文--JVM(1)

⭐️⭐️JVM内存模型 程序计数器&#xff1a;可以看作是当前线程所执行的字节码的行号指示器&#xff0c;用于存储当前线程正在执行的 Java 方法的 JVM 指令地址。如果线程执行的是 Native 方法&#xff0c;计数器值为 null。是唯一一个在 Java 虚拟机规范中没有规定任何 OutOf…

从RPA项目说说RPC和MQ的使用。

去年我负责一个 RPA&#xff08;机器人流程自动化&#xff09;项目&#xff0c;帮某电商公司搭建订单处理系统。项目里有个场景特别有意思&#xff1a;当用户下单后&#xff0c;系统需要同时触发库存扣减、物流调度、积分发放三个模块。一开始我们想都没想&#xff0c;直接用 R…

UUG杭州站 | 团结引擎1.5.0 OpenHarmony新Feature介绍

PPT下载地址&#xff1a;https://u3d.sharepoint.cn/:b:/s/UnityChinaResources/EaZmiWfAAdFFmuyd6c-7_3ABhvZoaM69g4Uo2RrSzT3tZQ?e2h7RaL 在2025年4月12日的Unity User Group杭州站中&#xff0c;Unity中国OpenHarmony技术负责人刘伟贤带来演讲《团结引擎1.5.0 OpenHarmony新…

Vue3——父子组件通信

在Vue开发中&#xff0c;组件通信是核心概念之一。良好的组件通信机制能让我们的应用更加清晰、可维护。 父传子defineProps defineProps是一个编译时宏&#xff0c;仅在内部可用&#xff0c;不需要显式导入。声明的 props 会自动暴露给模板。 还返回一个对象&#xff0c;其中…

游戏引擎学习第276天:调整身体动画

运行游戏&#xff0c;演示我们遇到的拉伸问题&#xff0c;看起来不太好&#xff0c;并考虑切换到更顶视角的视角 我们开始讨论游戏开发中的一些美学决策&#xff0c;特别是在处理动画方面。虽然我们是游戏程序员&#xff0c;通常不负责设计或艺术部分&#xff0c;但因为这是一…

从开发者角度看数据库架构进化史:JDBC - 中间件 - TiDB

作者&#xff1a; Lucien-卢西恩 原文来源&#xff1a; https://tidb.net/blog/e7034d1b Java 应用开发技术发展历程 在业务开发早期&#xff0c;用 Java 借助 JDBC 进行数据库操作&#xff0c;虽能实现基本交互&#xff0c;但需手动管理连接、编写大量 SQL 及处理结果集&a…

Mipsel固件Fuzzing小记

Mipsel固件Fuzzing小记 0x01 准备 1.1 安装必要工具链 首先需要安装 MIPS 交叉编译工具链和相关依赖&#xff1a; sudo apt-get install -y gcc-mipsel-linux-gnu g-mipsel-linux-gnu binwalk qemu-user-static afl这些工具分别用于&#xff1a;交叉编译、固件解包、二进制…

本土DevOps革命:Gitee如何撬动中国企业的数字化转型新动能

在数字化浪潮席卷全球的背景下&#xff0c;中国企业正面临前所未有的转型压力与机遇。随着《数据安全法》和《个人信息保护法》的全面实施&#xff0c;以及信创产业政策的深入推进&#xff0c;研发工具链的自主可控已成为关乎企业核心竞争力的战略命题。在这一关键赛道上&#…

强化学习入门:马尔科夫奖励过程二

文章目录 前言1、动作2、策略总结 前言 最近想开一个关于强化学习专栏&#xff0c;因为DeepSeek-R1很火&#xff0c;但本人对于LLM连门都没入。因此&#xff0c;只是记录一些类似的读书笔记&#xff0c;内容不深&#xff0c;大多数只是一些概念的东西&#xff0c;数学公式也不会…

JVM 双亲委派机制

一、从 JDK 到 JVM&#xff1a;Java 运行环境的基石 在 Java 开发领域&#xff0c;JDK&#xff08;Java Development Kit&#xff09;是开发者的核心工具包。它不仅包含了编译 Java 代码的工具&#xff08;如 javac&#xff09;&#xff0c;还内置了 JRE&#xff08;Java Run…

uniapp -- uCharts 仪表盘刻度显示 0.9999999 这样的值问题处理。

文章目录 🍉问题🍉解决方案🍉问题 在仪表盘上,23.8变成了 23.799999999999997 🍉解决方案 formatter格式化问题 1:在 config-ucharts.js 或 config-echarts.js 配置对应的 formatter 方法 formatter: {yAxisDemo1: function (

BGP团体属性

团体属性&#xff1a; 1、用于限制BGP路由的传递范围 2、类似于IGP协议中的tag值&#xff0c;用于对BGP路由实现标记。 团体属性的分类&#xff1a; 1、公共团体属性&#xff1a; Internet&#xff1a;默认所有路由都有该属性&#xff0c;具有该属性BGP路由发送给所有的BGP邻居…

Redis——三大策略

过期删除策略 Redis可以对key设置过期时间&#xff0c;因此需要有相应的机制将已过期的键值对删除 设置了过期时间的key会存放在过期字典中&#xff0c;可以用presist命令取消key过期时间 过期字典存储在redisDb结构中&#xff1a; typedef struct redisDb {dict *dict; …

Windows 操作系统使用 Tcping 命令检查目标主机端口是否开放

检查目标主机端口是否开放的方法已经很多了&#xff0c;网络上也有第三方网页版的检查工具&#xff0c;这篇文章给大家介绍一个实用小工具 Tcping 。 一、下载安装 Tcping 命令 Tcping 非 Windows 自带命令&#xff0c;我们需要下载 Tcping 可执行文件&#xff0c;然后将该文…

开源RTOS(实时操作系统):nuttx 编译

开源RTOS&#xff08;实时操作系统&#xff09;&#xff1a;nuttx 编译 手册&#xff1a;Installing — NuttX latest documentation 源码&#xff1a;GitHub - apache/nuttx: Apache NuttX is a mature, real-time embedded operating system (RTOS) Installing The fir…

python打包exe报错:处理文件时错误:Excel xlsx file; not supported

背景&#xff1a;最近用python写一个excel解析工具&#xff0c;然后打包成exe可执行文件的时候&#xff0c;遇到这样的问题 1.在我自己编译器运行是可以正常将上传后的excel进行解析&#xff0c;但是在打包成exe后&#xff0c;就无法正常解析excel 问题排查&#xff1a; 1.切换…

VUE3 -综合实践(Mock+Axios+ElementPlus)

目录 前言 目标 1.工程创建 2.Mock 2.1 配置Mock 扩 展 2.2 定义模拟数据 2.3 创建Mock服务器 3.导入ElementPlus 4.表格页面搭建 5.动态路由跳转 6.详情页面的制作 前言 基于前文 VUE3详细入门&#xff0c;我们对VUE3的基本使用有了初步的了解&#xff0c;下…