使用Flask快速搭建轻量级Web应用【第119篇—Flask】

使用Flask快速搭建轻量级Web应用

在这里插入图片描述

在Web开发领域,选择适合项目需求的框架至关重要。Flask,一个轻量级的Python Web框架,以其简洁、灵活和易扩展的特性而备受开发者青睐。本文将介绍如何使用Flask迅速搭建一个轻量级的Web应用,并通过实例代码详细解析关键步骤。

步骤1:安装Flask

首先,确保你已经安装了Python。然后,通过以下命令安装Flask:

pip install Flask

步骤2:创建Flask应用

创建一个新的Python文件,比如app.py,并添加以下基本的Flask应用结构:

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

上述代码创建了一个简单的Flask应用,当访问根路径’/‘时,返回’Hello, Flask!’。

步骤3:运行Flask应用

在命令行中运行以下命令启动Flask应用:

python app.py

访问http://127.0.0.1:5000/,你将看到网页上显示’Hello, Flask!'。

步骤4:添加更多页面

让我们扩展应用,添加更多页面。修改app.py文件:

from flask import Flask, render_templateapp = Flask(__name__)@app.route('/')
def index():return 'Hello, Flask!'@app.route('/about')
def about():return 'About page'if __name__ == '__main__':app.run(debug=True)

步骤5:使用模板引擎

Flask支持使用模板引擎来渲染动态页面。我们将使用Jinja2模板引擎来创建更复杂的页面。首先,在项目根目录下创建一个名为templates的文件夹。然后,添加一个模板文件index.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Flask App</title>
</head>
<body><h1>{{ title }}</h1><p>Welcome to the Flask app!</p>
</body>
</html>

修改app.py以使用模板引擎:

from flask import Flask, render_templateapp = Flask(__name__)@app.route('/')
def index():return render_template('index.html', title='Home')@app.route('/about')
def about():return render_template('index.html', title='About')if __name__ == '__main__':app.run(debug=True)

这样,你的页面就可以动态地显示不同的标题了。

通过以上步骤,你已经成功搭建了一个简单的Flask应用,并学会了如何添加路由和使用模板引擎。Flask的简单性和灵活性使其成为快速开发Web应用的理想选择。继续深入学习Flask,你将能够构建更加复杂和功能丰富的Web应用。

步骤6:处理表单

在许多Web应用中,用户交互离不开表单。让我们扩展我们的应用,添加一个简单的联系表单。首先,修改index.html,在表单中添加一个输入框和提交按钮:

<!-- index.html -->
<!-- ... -->
<body><h1>{{ title }}</h1><p>Welcome to the Flask app!</p><form method="post" action="/contact"><label for="name">Name:</label><input type="text" id="name" name="name" required><button type="submit">Submit</button></form>
</body>
<!-- ... -->

步骤7:处理表单提交

app.py中添加一个新的路由来处理表单提交:

from flask import Flask, render_template, request, redirect, url_forapp = Flask(__name__)@app.route('/')
def index():return render_template('index.html', title='Home')@app.route('/about')
def about():return render_template('index.html', title='About')@app.route('/contact', methods=['POST'])
def contact():if request.method == 'POST':name = request.form.get('name')return f'Thank you, {name}!'if __name__ == '__main__':app.run(debug=True)

现在,当用户在联系表单中提交信息时,将显示一条感谢消息。

步骤8:添加静态文件

Flask还允许你管理静态文件,如CSS和JavaScript。在项目根目录下创建一个名为static的文件夹,然后在其中添加一个CSS文件,比如style.css

/* static/style.css */
body {font-family: Arial, sans-serif;margin: 20px;
}form {margin-top: 20px;
}

index.html中引入这个样式文件:

<!-- index.html -->
<!-- ... -->
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Flask App</title><link rel="stylesheet" href="{{ url_for('static', filename='style.css') }}">
</head>
<!-- ... -->

步骤9:使用数据库

在许多Web应用中,需要持久性存储数据,而不仅仅是处理表单提交。Flask与SQLAlchemy集成得很好,让你能够轻松地与数据库交互。首先,安装SQLAlchemy:

pip install SQLAlchemy

然后,修改app.py以使用数据库。在这里,我们使用SQLite作为简单的演示数据库:

from flask import Flask, render_template, request, redirect, url_for
from flask_sqlalchemy import SQLAlchemyapp = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///site.db'  # 使用SQLite数据库
db = SQLAlchemy(app)class User(db.Model):id = db.Column(db.Integer, primary_key=True)name = db.Column(db.String(50), nullable=False)@app.route('/')
def index():users = User.query.all()return render_template('index.html', title='Home', users=users)@app.route('/about')
def about():return render_template('index.html', title='About')@app.route('/contact', methods=['POST'])
def contact():if request.method == 'POST':name = request.form.get('name')new_user = User(name=name)db.session.add(new_user)db.session.commit()return redirect(url_for('index'))if __name__ == '__main__':db.create_all()app.run(debug=True)

步骤10:模型与数据库迁移

随着应用的发展,你可能需要修改数据库模型。为了保持数据库结构的一致性,可以使用Flask-Migrate进行数据库迁移。首先,安装Flask-Migrate:

pip install Flask-Migrate

然后,修改app.py以添加迁移支持:

from flask import Flask, render_template, request, redirect, url_for
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrateapp = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///site.db'
db = SQLAlchemy(app)
migrate = Migrate(app, db)class User(db.Model):id = db.Column(db.Integer, primary_key=True)name = db.Column(db.String(50), nullable=False)@app.route('/')
def index():users = User.query.all()return render_template('index.html', title='Home', users=users)# ... (其他路由保持不变)if __name__ == '__main__':app.run(debug=True)

现在,你可以使用以下命令创建和应用数据库迁移:

flask db init
flask db migrate -m "Initial migration"
flask db upgrade

这将在数据库中创建一个名为migrations的文件夹,并应用初始迁移。

通过这些步骤,你已经学会了如何在Flask应用中使用数据库和进行数据库迁移。这使得你能够持久性地存储和管理数据,为应用的扩展提供了更多的可能性。在构建更复杂的应用时,可以考虑使用更强大的数据库,如PostgreSQL或MySQL。

步骤11:添加用户认证

许多Web应用需要用户认证系统,以便用户可以注册、登录和访问个人信息。Flask-Login是一个方便的扩展,可以帮助你实现用户认证功能。首先,安装Flask-Login:

pip install Flask-Login

然后,修改app.py以集成Flask-Login:

from flask import Flask, render_template, request, redirect, url_for
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate
from flask_login import LoginManager, UserMixin, login_user, login_required, logout_user, current_userapp = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///site.db'
app.config['SECRET_KEY'] = 'your_secret_key'  # 用于加密用户信息
db = SQLAlchemy(app)
migrate = Migrate(app, db)
login_manager = LoginManager(app)
login_manager.login_view = 'login'class User(db.Model, UserMixin):id = db.Column(db.Integer, primary_key=True)name = db.Column(db.String(50), nullable=False)@login_manager.user_loader
def load_user(user_id):return User.query.get(int(user_id))# ... (其他代码保持不变)@app.route('/login', methods=['GET', 'POST'])
def login():if request.method == 'POST':user_name = request.form.get('name')user = User.query.filter_by(name=user_name).first()if user:login_user(user)return redirect(url_for('index'))return render_template('login.html', title='Login')@app.route('/logout')
@login_required
def logout():logout_user()return redirect(url_for('index'))if __name__ == '__main__':app.run(debug=True)

步骤12:创建登录模板

创建一个名为login.html的新模板文件,用于用户登录页面:

<!-- login.html -->
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Login</title>
</head>
<body><h1>Login</h1><form method="post" action="/login"><label for="name">Name:</label><input type="text" id="name" name="name" required><button type="submit">Login</button></form>
</body>
</html>

步骤11:添加用户认证

许多Web应用需要用户认证系统,以便用户可以注册、登录和访问个人信息。Flask-Login是一个方便的扩展,可以帮助你实现用户认证功能。首先,安装Flask-Login:

pip install Flask-Login

然后,修改app.py以集成Flask-Login:

from flask import Flask, render_template, request, redirect, url_for
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate
from flask_login import LoginManager, UserMixin, login_user, login_required, logout_user, current_userapp = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///site.db'
app.config['SECRET_KEY'] = 'your_secret_key'  # 用于加密用户信息
db = SQLAlchemy(app)
migrate = Migrate(app, db)
login_manager = LoginManager(app)
login_manager.login_view = 'login'class User(db.Model, UserMixin):id = db.Column(db.Integer, primary_key=True)name = db.Column(db.String(50), nullable=False)@login_manager.user_loader
def load_user(user_id):return User.query.get(int(user_id))# ... (其他代码保持不变)@app.route('/login', methods=['GET', 'POST'])
def login():if request.method == 'POST':user_name = request.form.get('name')user = User.query.filter_by(name=user_name).first()if user:login_user(user)return redirect(url_for('index'))return render_template('login.html', title='Login')@app.route('/logout')
@login_required
def logout():logout_user()return redirect(url_for('index'))if __name__ == '__main__':app.run(debug=True)

步骤12:创建登录模板

创建一个名为login.html的新模板文件,用于用户登录页面:

<!-- login.html -->
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Login</title>
</head>
<body><h1>Login</h1><form method="post" action="/login"><label for="name">Name:</label><input type="text" id="name" name="name" required><button type="submit">Login</button></form>
</body>
</html>

总结:

在本文中,我们深入探讨了如何使用Flask快速搭建轻量级Web应用。从安装Flask开始,我们逐步演示了如何创建路由、使用模板引擎、处理表单、管理静态文件,以及将数据库集成到应用中。通过添加用户认证,我们使应用更具实用性。

具体步骤包括:

  1. 安装Flask:通过简单的命令安装Flask框架,为项目的构建做好准备。
  2. 创建Flask应用:建立一个基本的Flask应用结构,并通过一个简单的例子介绍了路由的概念。
  3. 使用模板引擎:引入Jinja2模板引擎,创建动态页面,使得应用更灵活和易于维护。
  4. 处理表单:演示如何处理表单提交,包括获取用户输入和展示感谢消息。
  5. 添加静态文件:管理并引入静态文件,提高应用的可视化效果,如添加CSS样式。
  6. 使用数据库:集成SQLite数据库,并创建模型以持久性地存储数据,为应用添加更多功能和扩展性。
  7. 模型与数据库迁移:使用Flask-Migrate实现数据库模型的变更和迁移,确保数据库结构的一致性。
  8. 添加用户认证:引入Flask-Login扩展,实现用户注册、登录、注销等功能,使应用更安全和可交互。

通过这些步骤,读者可以了解如何构建一个简单而完整的Flask应用,并通过不断深入学习,掌握更多高级功能以满足更复杂的项目需求。Flask的灵活性、简洁性以及丰富的扩展库,使其成为快速搭建Web应用的理想选择。

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

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

相关文章

js导出的excel文件无法打开/打开乱码,excel无法打开xxx.xlsx因为文件格式或文件扩展无效

excel无法打开xxx.xlsx因为文件格式或文件扩展无效 使用 a 标签导出这里就不细说了&#xff0c;直接说上述问题解决方案 在调用导出接口的时候加上两个参数 responseType: “blob” responseEncoding: “utf8” export function test(data) {return util({url: /test,method: …

04-微服务 面试题

1.Spring Cloud 常见的组件有哪些? Spring Cloud 5大组件有哪些? 基础的内容考察回答原则:简单的问题不能答错(一道面试题就能淘汰一个人)新手和老手都要注意面试参考回答: 面试官:Spring Cloud 5大组件有哪些? 候选人:早期我们一般认为的Spring Cloud五大组件是 …

【C++】反向迭代器仿函数模板进阶

反向迭代器&仿函数&模板进阶 一&#xff0c;反向迭代器1. 什么是反向迭代器2. 模拟实现3. 如何使用 二&#xff0c;仿函数1. 仿函数的概念2. 仿函数的用法 三&#xff0c;模板1. 非类型模板参数2. 模板的特化2.1 特化概念2.2 函数模板特化2.3 类模板特化2.3.1 全特化2.…

Flink 性能优化总结(内存配置篇)

内存配置优化 Flink 内存模型 内存模型详解 进程内存&#xff08;Total Process Memory&#xff09;&#xff1a;Flink 进程内存分为堆上内存和堆外内存&#xff0c;堆上内存和 堆外内存的主要区别在于它们的管理方式不同和使用方式不同&#xff0c;这些会影响到它们的性能和…

中兴R5300G4无法识别全部硬盘与服务器Smart31002100RAID卡修改端口模式配置方法

中兴R5300G4无法识别全部硬盘&#xff0c;需要启动UEFI模式。 问题描述 硬盘配置RAID或者HBA直通模式需要修改RAID卡的端口模式。 本文介绍服务器分别在legacy、UEFI模式下的配置方法。 适用产品 R5300 G4、R5500 G4、R8500 G4 解决方案 一&#xff0e;Legacy启动模式&#x…

《剑指 Offer》专项突破版 - 面试题 77 和 78 : 详解归并排序(C++ 实现)

目录 归并排序详解 递归实现 迭代实现 面试题 77 : 链表排序 面试题 78 : 合并排序链表 法一、利用最小堆选取值最小的节点 法二、按照归并排序的思路合并链表 归并排序详解 归并排序就是将两个或两个以上的有序表合并成一个有序表的过程。将两个有序表合并成一个有序表…

机器学习-04-分类算法-01决策树案例

总结 本系列是机器学习课程的系列课程&#xff0c;主要介绍机器学习中分类算法&#xff0c;本篇为分类算法开篇与决策树部分。 本门课程的目标 完成一个特定行业的算法应用全过程&#xff1a; 懂业务会选择合适的算法数据处理算法训练算法调优算法融合 算法评估持续调优工程…

redis 缓冲区详解(性能优化缓冲区优化)

目录 前言 客户端输入缓冲区 输出缓冲区 集群缓冲区 全量复制缓冲区问题 增量复制缓冲区问题 前言 在我的《Redis 为啥那么快》这篇文章中&#xff0c;详细总结了Redis 为啥那么快。今天当我要详细阐述Redis 的缓冲区时&#xff0c;意识到应该加上Redis 的缓冲区。我们假…

01_04_JavaWEB03_XML、Tomcat、http

XML_Tomcat10_HTTP 参考尚硅谷再总结复习 一 XML XML是EXtensible Markup Language的缩写&#xff0c;翻译过来就是可扩展标记语言。所以很明显&#xff0c;XML和HTML一样都是标记语言&#xff0c;也就是说它们的基本语法都是标签。 可扩展 三个字表面上的意思是XML允许自定义…

VBA combox/listbox 控件响应鼠标滚轮事件

在vba中&#xff0c;我们在用户窗体中如果添加有combox控件&#xff0c;或者是listbox控件。正常情况下&#xff0c;combox 和 listbox 是不响应鼠标滚轮事件的&#xff0c;且默认的VBA控件中&#xff0c;也没有提供响应鼠标滚轮事件的方法和入口。如此以来&#xff0c;我们在c…

【毕设级项目】基于AI技术的多功能消防机器人(完整工程资料源码)

基于AI技术的多功能消防机器人演示效果 竞赛-基于AI技术的多功能消防机器人视频演示 前言 随着“自动化、智能化”成为数字时代发展的关键词&#xff0c;机器人逐步成为社会经济发展的重要主体之一&#xff0c;“机器换人”成为发展的全新趋势和时代潮流。在可预见的将来&#…

Adobe Photoshop 2024 v25.5.1 for mac 强大的图形编辑工具 兼容 M1/M2/M3

Mac毒搜集到的Adobe Photoshop 2024 v25.5.1 是一款强大的图形编辑和设计工具! v25.5.1版本AI生成式无法使用 应用介绍 Adobe Photoshop 2024是一款强大的图像处理软件&#xff0c;由Adobe公司开发。它可以用于编辑和处理照片、图形和其他类型的图像&#xff0c;包括设计、绘画…

Java双非大二找实习记录

先说结论&#xff1a;2.22→3.6线上线下面了七家&#xff0c;最后oc两家小公司&#xff0c;接了其中一个。 本人bg&#xff1a; 真名不经传双非一本&#xff0c;无绩点无竞赛无奖项无实习&#xff0c;23年12月开始学java。若非要说一点相关的经历&#xff0c;就是有java基础&…

XWPFDocument中XmlCursor的使用

类名&#xff1a; org.apache.xmlbeans Interface XmlCursor版本&#xff1a; 原xml代码&#xff1a; <w:p w14:paraId"143E3662" w14:textId"4167FBA7" w:rsidR"001506F2" w:rsidRPr"003F3D89" w:rsidRDefault"001506F2&qu…

Python3虚拟环境之virtualenv

virtualenv 在开发Python应用程序的时候&#xff0c;系统安装的Python3只有一个版本&#xff1a;3.7。所有第三方的包都会被pip安装到Python3的site-packages目录下。 如果要同时开发多个应用程序&#xff0c;这些应用程序都会共用一个Python&#xff0c;就是安装在系统的Pyt…

【三】安装k8s+kuboard, 拉取harbor镜像并执行yml文件

自己的配置 我在尊云上两百多买了三台2c4g的服务器&#xff0c;其实买两台就够了。 修改服务网卡掩码 确保几台服务器内网之间可以ping通 以尊云为例&#xff0c;vi /etc/sysconfig/network-scripts/ifcfg-eth1 修NETMASK值为255.0.0.0&#xff0c;重启服务器&#xff0c;尝试…

HarmonyOS 关系型数据 整体测试 进行 初始化 增删查改 操作

好啊 前面的文章 HarmonyOS 数据持久化 关系型数据库之 初始化操作 HarmonyOS 数据持久化 关系型数据库之 增删改逻辑编写 HarmonyOS 数据持久化 关系型数据库之 查询逻辑编写 我们分别编写了 初始化数据库表 增删查改操作 的逻辑代码 那么 下面我们就来整体操作一下 然后 这…

C# OpenCvSharp 图片批量改名

目录 效果 项目 代码 下载 C# OpenCvSharp 图片批量改名 效果 项目 代码 using NLog; using OpenCvSharp; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Windows.Forms; namespace OpenCvSharp_Demo { publi…

微信小程序仿QQ头像轮播效果

1、效果图 2、效果流程分析 1、第1个头像大小从1到0缩小的同时&#xff0c;第2个头像左移 2、上面动画结束后&#xff0c;延迟50ms&#xff0c;第3个头像从0到1放大 3、把头像列表顺序前移一位&#xff0c;并重置轮播状态&#xff0c;以此达到一个循环。然后继续第一个步骤 …

Java旋转矩阵

题目&#xff1a; 给你一幅由 N N 矩阵表示的图像&#xff0c;其中每个像素的大小为 4 字节。请你设计一种算法&#xff0c;将图像旋转 90 度。 不占用额外内存空间能否做到&#xff1f; 示例 1: 给定 matrix [ [1,2,3], [4,5,6], [7,8,9] ], 原地旋转输入矩阵&…