使用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.mzph.cn/news/741299.shtml

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

相关文章

数学建模——蒙特卡洛法

目录 1.介绍2.可以做的题型3.实战3.1求pi的值3.2求定积分x^2 的值 参加了大大小小很多场比赛了&#xff0c;但是都是混子&#xff0c;但还是打算记录一下吧&#xff0c;系统认真过一遍。后续功力深厚&#xff0c;会拓展写的文章&#xff0c;目前是干货&#xff0c;一些背景啥的…

C#多线程(5)——异步方法async与await

在上一章节中&#xff0c;为大家介绍了C#多线程&#xff08;4&#xff09;——任务并行库TPL&#xff0c;TPL是从.NetFramwork4.0后引入的基于异步操作的一组API&#xff0c;核心关注于任务【 T a s k 和 T a s k < T > \textcolor{red}{Task 和 Task<T>} Task和Ta…

轴向磁通电机(轴向电机)属于高效节能型电机 本土企业已具备高性能产品生产实力

轴向磁通电机&#xff08;轴向电机&#xff09;属于高效节能型电机 本土企业已具备高性能产品生产实力 按照磁通路径方向不同&#xff0c;电机可分为径向磁通电机以及轴向磁通电机两种类型。轴向磁通电机又称轴向电机&#xff0c;指电机旋转轴与磁通方向平行的磁通电机。与径向…

Ai-M61-32SU+字库+LCD

Ai-M61-32SU 有4M flash&#xff0c;可以下载一个200多K的GB2312_80字库 一、将gb2312_80.bin(字库文件)烧录到Ai-M61-32SU中 1、将gb2312_80.bin放到工程的根目录 2、修改flash_prog_cfg.ini文件&#xff0c;增加了partition和media部分 [cfg] # 0: no erase, 1:programmed …

js视频上传的方法

一、视频上传于图片上传类似他们的上传方法一样。路径不同标签不同&#xff1b; 二、直接上效果 三、直接上代码 // // 上传图片 let urls "https://wwz.jingyi.icu/"; let a $("form img") // console.log(a);function fl() {let read document.getE…

探索制氮机在农产品保鲜中的应用方式

在现代生活中&#xff0c;农产品保鲜成为老生常谈的话题&#xff0c;水果数次厂商总是在为如何使水果蔬菜能够保存时间长一点而发愁&#xff0c;而制氮机的出现则解决了这一难题&#xff0c;为农产品保鲜技术带来了革命性的变革。本期恒业通小编和您一起了解制氮机在水果,蔬菜保…

Pytorch基础(21)-- torch.repeat_interleave()方法

分享一下自己目前在维护的Github项目&#xff0c;由于本人博士阶段接触了一个全新的研究方向-----使用机器学习、强化学习、深度学习等方法解决组合优化问题&#xff0c;维护这个项目的目的&#xff1a; &#xff08;1&#xff09;记录自己阅读过的paper&#xff0c;同时分享一…

【数学建模】熵权法 Python代码

熵权法是一种客观的赋权方法&#xff0c;它可以靠数据本身得出权重。 依据的原理&#xff1a;指标的变异程度越小&#xff0c;所反映的信息量也越少&#xff0c;其对应的权值也应该越低。 import numpy as np#自定义对数函数mylog&#xff0c;用于处理输入数组中的0元素 def m…

ROS机器人操作系统底层原理及代码剖析

本文介绍ROS机器人操作系统&#xff08;Robot Operating System&#xff09;的实现原理&#xff0c;从最底层分析ROS代码是如何实现的。 1、序列化 把通信的内容&#xff08;也就是消息message&#xff09;序列化是通信的基础&#xff0c;所以我们先研究序列化。 尽管笔者从事…

jenkins部署go应用 基于docker

丢弃旧的的构建 github 拉取代码 拉取代码排除指定配置文件 报错 环境变量失效 服务器版本为1.21.6 但是一直没有生效

字符串|替换数字

卡码网题目链接 #include<iostream> using namespace std; int main() {string s;while (cin >> s) {int count 0; // 统计数字的个数int sOldSize s.size();for (int i 0; i < s.size(); i) {if (s[i] > 0 && s[i] < 9) {count;}}// 扩充字符…

6.同步异步、正则表达式

JS执行机制 js的特点&#xff1a;单线程&#xff0c;同一时间只能做一件事 可以通过多核CPU解决这个问题&#xff0c;允许js脚本创建多个线程&#xff0c;于是js出现了同步和异步 同步 程序执行的时候按照顺序依次执行 异步 程序执行的时候&#xff0c;会跳过某个步骤继续…

基于Springboot的驾校预约学习系统(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的驾校预约学习系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构…

fate隐私求交案例

intersect组件是解决纵向联邦学习中的隐私求交问题 fate隐私求交的方式有三种&#xff1a;raw,rsa,dh。raw方式不安全&#xff0c;rsa和dh方式是安全的&#xff0c;dh是基于对称加密的安全交集 rsa是基于RSA(非对称加密)的安全交集&#xff0c;&#xff0c;dh方法也用于安全的…

供应链金融新篇章:2001-2022年上市公司金融水平测算概览

数据说明&#xff1a;参考周兰和吴慧君&#xff08;2022&#xff09;的方法测算出2001-2022年上市公司供应链金融水平&#xff0c;供大家研究使用。数据来源&#xff1a;企业年报等。时间跨度&#xff1a;2001-2022年 数据范围&#xff1a;A股上市公司 数据指标&#xff1a;…

实现swiper 3d 轮播效果

先上个效果图&#xff0c;代码可以直接拿~ 安装swiper和vue-awesome-swiper 因为项目用的是nuxt2&#xff0c;所以考虑到swiper的兼容问题&#xff0c;选择的是"swiper": “^5.2.0” 首先是安装swiper和vue-awesome-swiper&#xff0c;并指定版本 npm install s…

基于Unity3D的AVG卡牌游戏设计与实现

目 录 摘 要 I Abstract II 引 言 1 1 相关技术 3 1.1 C# 3 1.2 Unity3D 3 1.3 UGUI 3 1.4 XML 4 1.5 原型设计模式 4 1.6 本章小结 4 2 系统分析 5 2.1 用户需求 5 2.2 功能需求 5 2.3 非功能需求 6 2.4 本章小结 6 3 系统设计 7 3.1 系统该要设计 7 3.2 系统详细设计 7 3.2.…

数组和指针笔试题目解析---掌握他们拿下指针魔鬼

目录 一、前言二、一维数组2.1代码2.2分析2.3验证运行结果 三、字符数组3.1代码13.1.1分析3.1.2验证运行结果 3.2代码23.2.1分析3.2.2验证运行结果 3.3代码33.3.1分析3.3.2验证运行结果 3.4代码43.4.1分析3.4.2验证运行结果 3.5代码53.5.1分析3.5.2验证运行结果 3.6代码63.6.1分…

基于SpringBoot和VUE技术的智慧生活商城系统设计与实现

** &#x1f345;点赞收藏关注 → 私信领取本源代码、数据库&#x1f345; 本人在Java毕业设计领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目&#xff0c;希望你能有所收获&#xff0c;少走一些弯路。&#x1f345;关注我不迷路&#x1f345;** 一、研究背景…

Net Core 使用Mongodb操作文件(上传,下载)

Net Core 使用Mongodb操作文件&#xff08;上传&#xff0c;下载&#xff09; 1.Mongodb GridFS 文件操作帮助类。 GridFS 介绍 https://baike.baidu.com/item/GridFS/6342715?fraladdin DLL源码&#xff1a;https://gitee.com/chenjianhua1985/mongodb-client-encapsulati…