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 开发等。

相关推荐
onceco27 分钟前
领域LLM九讲——第5讲 为什么选择OpenManus而不是QwenAgent(附LLM免费api邀请码)
人工智能·python·深度学习·语言模型·自然语言处理·自动化
狐凄1 小时前
Python实例题:基于 Python 的简单聊天机器人
开发语言·python
小小小小宇2 小时前
虚拟列表兼容老DOM操作
前端
悦悦子a啊2 小时前
Python之--基本知识
开发语言·前端·python
安全系统学习3 小时前
系统安全之大模型案例分析
前端·安全·web安全·网络安全·xss
涛哥码咖3 小时前
chrome安装AXURE插件后无效
前端·chrome·axure
OEC小胖胖3 小时前
告别 undefined is not a function:TypeScript 前端开发优势与实践指南
前端·javascript·typescript·web
行云&流水4 小时前
Vue3 Lifecycle Hooks
前端·javascript·vue.js
笑稀了的野生俊4 小时前
在服务器中下载 HuggingFace 模型:终极指南
linux·服务器·python·bash·gpu算力
Naiva4 小时前
【小技巧】Python+PyCharm IDE 配置解释器出错,环境配置不完整或不兼容。(小智AI、MCP、聚合数据、实时新闻查询、NBA赛事查询)
ide·python·pycharm