使用Flask快速搭建轻量级Web应用【第127篇—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.rhkb.cn/news/274687.html

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

相关文章

【测试开发学习历程】Linux用户管理+文件权限管理

目录 一、用户管理 &#xff08;一&#xff09;用户和用户组的基本概念 1.概念 2.设置原因 3.用户与用户组的关系 4.用户类型 &#xff08;二&#xff09;用户的创建、修改属性和删除用户 1.用户信息文件 2.创建用户 3.修改用户密码 4.修改用户信息 5.用户查询 6.…

Hive面经

hive原理 Hive 内部表和外部表的区别Hive 有索引吗运维如何对 Hive 进行调度ORC、Parquet 等列式存储的优点数据建模用的哪些模型&#xff1f;1. 星型模型2. 雪花模型3. 星座模型 为什么要对数据仓库分层&#xff1f;使用过 Hive 解析 JSON 串吗sort by 和 order by 的区别数据…

Windows®、Linux® 和 UNIX® 系统都适用的远程桌面工具 OpenText ETX

Windows、Linux 和 UNIX 系统都适用的远程桌面工具 OpenText ETX 为 Windows、Linux 和 UNIX 实施精益、经济高效的虚拟化&#xff1b;提供完整的远程 Windows 可用性&#xff1b;以类似本地的性能远程工作&#xff1b;安全地保护系统和知识产权&#xff08;IP&#xff09;&am…

PFMEA的输入输出和特殊特性

DFMEA輸入&#xff1a;技术条件、市场需求 DFMEA輸出&#xff1a;产品特殊特性、试验、样件CPPFMEA輸入&#xff1a;过往经验、流程图、DPMEA PFMEA輸出&#xff1a;CP、过程特殊特性、SIP、SOP1. PFMEA的输入包括&#xff1a;&#xff08;&#xff09;过程流程图、DFMEA 、图样…

ElasticSearch 底层读写原理

ElasticSearch 底层读写原理 ​ 写请求是写入 primary shard&#xff0c;然后同步给所有的 replica shard&#xff1b;读请求可以从 primary shard 或 replica shard 读取&#xff0c;采用的是随机轮询算法。 1、ES写入数据的过程 1.选择任意一个DataNode发送请求&#xff0c…

Linux-gdb调试

文章目录 前言查看&#xff08;显示&#xff09;源代码 list/l运行程序run/r打断点b查看断点删除断点打开/关闭断点逐过程 逐语句查看变量常显示continuefinishuntil修改指定变量退出gdb 前言 GDB&#xff0c;即GNU调试器&#xff08;GNU Debugger&#xff09;&#xff0c;是G…

云仓酒庄最新动态:渠道商小沙龙活动持续开展 业务持续稳健发展

原标题&#xff1a;2024年云仓酒庄小沙龙活动持续开展 业务持续稳健发展 在风起云涌的酒类市场中&#xff0c;云仓酒庄以其独特的经营模式和优质的服务&#xff0c;赢得了广大消费者的青睐。而在这背后&#xff0c;云仓酒庄各地小沙龙活动的频繁开展&#xff0c;无疑为其业务的…

命名空间多线程计时(C++基础)

命名空间 不要在头文件内使用using namespace&#xff0c;一定要确保实在一个足够小的作用域下使用&#xff0c;在哪个范围内&#xff0c;比如函数、if语句等&#xff0c;但一定不要在头文件中使用&#xff01;&#xff01;&#xff01; 上述示例中&#xff0c;会调用orange中…

【位运算】【脑筋急转弯】2749. 得到整数零需要执行的最少操作数

作者推荐 视频算法专题 本文涉及知识点 2749. 得到整数零需要执行的最少操作数 给你两个整数&#xff1a;num1 和 num2 。 在一步操作中&#xff0c;你需要从范围 [0, 60] 中选出一个整数 i &#xff0c;并从 num1 减去 2i num2 。 请你计算&#xff0c;要想使 num1 等于 …

【Spring云原生系列】SpringBoot+Spring Cloud Stream:消息驱动架构(MDA)解析,实现异步处理与解耦合

&#x1f389;&#x1f389;欢迎光临&#xff0c;终于等到你啦&#x1f389;&#x1f389; &#x1f3c5;我是苏泽&#xff0c;一位对技术充满热情的探索者和分享者。&#x1f680;&#x1f680; &#x1f31f;持续更新的专栏《Spring 狂野之旅&#xff1a;从入门到入魔》 &a…

FreeRTOS学习笔记-基于stm32(5)列表和列表项

一、列表与列表项简介 列表是FreeRTOS中的一种数据结构&#xff0c;类似双向循环链表。用来跟踪FreeRTOS中的任务。列表项就是存放在列表中的项目。 二、列表 列表结构体&#xff1a; typedef struct xLIST {listFIRST_LIST_INTEGRITY_CHECK_VALUE //校验值c…

强化学习工具箱(Matlab)

1、Get Started 1.1、MDP环境下训练强化学习智能体 MDP环境如下图 每个圆圈代表一个状态每个状态都有上或下的选择智能体从状态 1 开始智能体接收的奖励值为图中状态转移的值训练目标是最大化累计奖励 &#xff08;1&#xff09;创建 MDP 环境 创建一个具有 8 个状态和 2 …

基于深度学习的番茄叶片病害检测系统(含UI界面、yolov8、Python代码、数据集)

项目介绍 项目中所用到的算法模型和数据集等信息如下&#xff1a; 算法模型&#xff1a;     yolov8 yolov8主要包含以下几种创新&#xff1a;         1. 可以任意更换主干结构&#xff0c;支持几百种网络主干。 数据集&#xff1a;     网上下载的数据集&#x…

03_渲染进程调用node

我们先创建一个文件夹及文件&#xff0c;并且在 html 引入 JS 文件。 在 render.js 里面输入以下内容&#xff1a; let fs require(fs) // let是在当前代码块有效console.log(fs) // 将fs对象的内容打印到控制台供调试和查看 fs 模块&#xff1a;对文件系统进行操作&#xf…

对GIS与游戏引擎(UE4 或 U3D)结合的看法

GIS与游戏引擎结合&#xff0c;这在6年前就已经很多公司在进行探索了&#xff0c;经过这几年的发展&#xff0c;结合当前的政策&#xff0c;从以下几方面说一下我的看法&#xff1a; 1.GIS客户都是特殊单位及领域。2018年后&#xff0c;国内已经对国产化有明确要求了&#xff0…

测试一下 Anthropic 宣称超过 GPT-4 的 Claude 3 Opus

测试一下 Anthropic 宣称超过 GPT-4 的 Claude 3 Opus 0. 引言1. 测试 Claude 3 Opus3. 试用 api key 限制 0. 引言 今天测试一下 Anthropic 发布的 Claude 3 Opus。 3月4日&#xff0c;Anthropic 宣布推出 Claude 3 型号系列&#xff0c;该系列在广泛的认知任务中树立了新的…

Java客户端调用elasticsearch进行深度分页查询 (search_after)

Java客户端调用elasticsearch进行深度分页查询 &#xff08;search_after&#xff09; 一. 代码二. 测试结果 前言 这是我在这个网站整理的笔记,有错误的地方请指出&#xff0c;关注我&#xff0c;接下来还会持续更新。 作者&#xff1a;神的孩子都在歌唱 具体的Search_after解…

keepalived原理以及lvs、nginx跟keeplived的运用

keepalived基础 keepalived的原理是根据vrrp协议&#xff08;主备模式&#xff09;去设定的 vrrp技术相关原理 状态机&#xff1b; 优先级0~255 心跳线1秒 vrrp工作模式 双主双备模式 VRRP负载分担过程 vrrp安全认证&#xff1a;使用共享密匙 keepalived工具介绍 keepal…

CSS 【详解】响应式布局(明天内容)

响应式布局&#xff1a; 同一页面在不同的屏幕上有不同的布局&#xff0c;即一套代码自适应不同的屏幕。 常用 单位&#xff1a; 像素&#xff08;px&#xff09;&#xff1a;像素是最常用的长度单位&#xff0c;它表示屏幕上的一个物理像素点。例如&#xff0c;width: 200px; …

如何导入非同一级的py文件里的函数

我正在main_cnn.py里写代码&#xff0c;要到入models文件夹下的resnet50里的CustomResNet50函数。应该怎么导入。 如果 models 文件夹与我们main_cnn.py的主文件不在同一级目录下&#xff0c;而是在上一级目录&#xff0c;你可以这样导入&#xff1a; from ..models.resnet50…