Python使用Flask构建简单的web应用

构建一个简单的 Flask Web 应用程序是学习 Python Web 开发的良好起点。Flask 是一个轻量级的 WSGI Web 应用框架,它的主要目标是让开发者更容易构建 Web 应用,同时保持简单性和灵活性。下面我们将详细介绍如何使用 Flask 构建一个简单的 Web 应用,包括创建项目、定义路由、处理请求、渲染模板和使用表单等方面。

环境准备

在开始之前,请确保你已经安装了 Python 和 pip。如果还没有安装,可以从 Python 官网 下载并安装最新版本的 Python。安装完毕后,可以使用以下命令来安装 Flask:

复制代码

pip install Flask

创建项目结构

首先,我们创建一个项目目录来存放我们的 Flask 应用。在命令行中执行以下命令:

mkdir flask_app cd flask_app

在这个目录中,我们创建一个名为 app.py 的文件,这将是我们的主应用文件。项目的基本结构如下:

复制代码

flask_app/ app.py templates/ index.html

编写 Flask 应用

app.py 文件中,我们将编写我们的 Flask 应用的主要代码。以下是一个简单的示例:

from flask import Flask, render_template, request, redirect, url_for app = Flask(__name__) @app.route('/') def index(): return render_template('index.html') @app.route('/hello/<name>') def hello(name): return f'Hello, {name}!' @app.route('/greet', methods=['GET', 'POST']) def greet(): if request.method == 'POST': name = request.form['name'] return redirect(url_for('hello', name=name)) return render_template('greet.html') if __name__ == '__main__': app.run(debug=True)

创建模板

templates 目录中,我们创建两个 HTML 模板文件:index.htmlgreet.html

index.html

这是我们的首页模板:

复制代码

<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Home Page</title> </head> <body> <h1>Welcome to the Flask App!</h1> <p><a href="{``{ url_for('greet') }}">Greet Someone</a></p> </body> </html>

greet.html

这是一个包含表单的模板,用于输入名字:

复制代码

<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Greet</title> </head> <body> <h1>Greet Someone</h1> <form method="POST"> <label for="name">Enter your name:</label> <input type="text" id="name" name="name" required> <button type="submit">Submit</button> </form> </body> </html>

运行应用

确保所有文件保存完毕后,在命令行中运行以下命令来启动 Flask 应用:

复制代码

python app.py

打开浏览器,访问 http://127.0.0.1:5000/,你应该能看到我们的首页。点击"Greet Someone"链接,会跳转到输入名字的表单页面。输入名字并提交后,会重定向到一个显示问候信息的页面。

扩展功能

我们可以在此基础上添加更多功能,例如用户登录、数据库连接等。

用户登录示例

首先,我们需要一个用于存储用户信息的地方。为了简单起见,我们使用 Python 字典来模拟数据库。更新 app.py 如下:

复制代码

python

複製程式碼

from flask import Flask, render_template, request, redirect, url_for, session, flash from werkzeug.security import generate_password_hash, check_password_hash app = Flask(__name__) app.secret_key = 'supersecretkey' # Mock database users = {} @app.route('/') def index(): return render_template('index.html') @app.route('/register', methods=['GET', 'POST']) def register(): if request.method == 'POST': username = request.form['username'] password = request.form['password'] if username in users: flash('Username already exists!', 'error') else: users[username] = generate_password_hash(password) flash('Registration successful!', 'success') return redirect(url_for('login')) return render_template('register.html') @app.route('/login', methods=['GET', 'POST']) def login(): if request.method == 'POST': username = request.form['username'] password = request.form['password'] user_password_hash = users.get(username) if user_password_hash and check_password_hash(user_password_hash, password): session['username'] = username flash('Login successful!', 'success') return redirect(url_for('profile')) else: flash('Invalid credentials!', 'error') return render_template('login.html') @app.route('/profile') def profile(): if 'username' in session: return f'Hello, {session["username"]}!' return redirect(url_for('login')) @app.route('/logout') def logout(): session.pop('username', None) flash('You have been logged out.', 'info') return redirect(url_for('index')) if __name__ == '__main__': app.run(debug=True)

创建新的模板

我们需要为注册和登录页面创建新的模板文件。

register.html
复制代码

html

複製程式碼

<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Register</title> </head> <body> <h1>Register</h1> <form method="POST"> <label for="username">Username:</label> <input type="text" id="username" name="username" required> <label for="password">Password:</label> <input type="password" id="password" name="password" required> <button type="submit">Register</button> </form> <p><a href="{``{ url_for('login') }}">Already have an account? Login here.</a></p> </body> </html>

login.html
复制代码

html

複製程式碼

<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Login</title> </head> <body> <h1>Login</h1> <form method="POST"> <label for="username">Username:</label> <input type="text" id="username" name="username" required> <label for="password">Password:</label> <input type="password" id="password" name="password" required> <button type="submit">Login</button> </form> <p><a href="{``{ url_for('register') }}">Don't have an account? Register here.</a></p> </body> </html>

总结

通过上述步骤,我们构建了一个简单但功能全面的 Flask Web 应用。这个应用包括了基本的路由、模板渲染、表单处理以及简单的用户认证功能。Flask 的灵活性使其非常适合快速开发和原型设计,同时也能够扩展以应对更复杂的需求。通过这个示例,你可以继续学习和探索 Flask 的更多高级功能,如数据库集成、蓝图、API 开发等。

相关推荐
Csvn7 小时前
OpenSpec 详细使用教程
前端
风吹夏回8 小时前
Python 全局异常处理:从“满屏 try-except”到优雅兜底
开发语言·python
小熊Coding8 小时前
Python爬取当当网二手图书项目实战!
开发语言·爬虫·python·beautifulsoup·requests·二手图书
之歆8 小时前
Day19_LESS 完全指南——从入门到工程实践
前端·css·less
秋98 小时前
Java项目运行5天左右自动宕机:系统性定位与解决方案
java·开发语言·python
小江的记录本8 小时前
【JVM虚拟机】垃圾回收GC:垃圾收集器:CMS:核心原理、回收流程、优缺点、废弃原因(附《思维导图》+《面试高频考点清单》)
java·jvm·后端·python·spring·面试·maven
云水一下9 小时前
HTML5 从入门到精通:实战收官——从零搭建完整静态网站,综合运用所有知识
前端·html5
不总是9 小时前
Windows 系统 Node.js 免安装版(zip)安装与配置教程(2026 最新)
前端·windows·node.js
田里的水稻9 小时前
OE_ubuntu26.04与宿主机之间复制粘贴内容
人工智能·python·机器人
冬奇Lab9 小时前
每日一个开源项目(第105篇):Twenty - 跳出 Salesforce 的圈套,定义现代开源 CRM
前端·后端·开源