使用 Python 构建一个简单的 Web 应用程序
在当今的软件开发中,Web 应用程序扮演着非常重要的角色。无论是企业级应用、社交平台还是个人博客,Web 技术都是支撑这些服务的核心。Python 作为一种简洁易读、功能强大的编程语言,在 Web 开发领域也有广泛的应用。本篇文章将介绍如何使用 Python 的 Flask 框架来构建一个简单的 Web 应用程序,并展示一些基本的功能实现。
1. 环境准备
在开始编写代码之前,我们需要准备好开发环境。以下是所需的工具和库:
Python 3.xpip(Python 包管理器)Flask(轻量级 Web 框架)安装 Flask 非常简单,只需在终端运行以下命令即可:
pip install Flask
2. 创建第一个 Flask 应用
Flask 是一个微框架,非常适合快速开发小型 Web 应用。下面我们来创建一个最简单的 Flask 应用。
示例代码:app.py
from flask import Flaskapp = Flask(__name__)@app.route('/')def home(): return "欢迎来到我的第一个 Flask Web 应用!"if __name__ == '__main__': app.run(debug=True)
运行应用
保存上述代码为 app.py
,然后在终端执行:
python app.py
默认情况下,Flask 会在本地主机的 5000 端口启动服务器。打开浏览器访问 http://127.0.0.1:5000/,你将看到页面显示“欢迎来到我的第一个 Flask Web 应用!”。
3. 添加 HTML 页面支持
虽然返回字符串可以用于调试,但在实际项目中我们通常会使用 HTML 页面进行渲染。Flask 提供了模板引擎 Jinja2,可以方便地渲染 HTML 文件。
目录结构
my_flask_app/│├── app.py└── templates/ └── index.html
编写 HTML 页面:templates/index.html
<!DOCTYPE html><html lang="zh-CN"><head> <meta charset="UTF-8"> <title>首页</title></head><body> <h1>欢迎访问我的网站</h1> <p>这是一个使用 Flask 构建的简单网页。</p></body></html>
修改 app.py
以渲染模板
from flask import Flask, render_templateapp = Flask(__name__)@app.route('/')def home(): return render_template('index.html')if __name__ == '__main__': app.run(debug=True)
现在刷新页面,你会看到渲染后的 HTML 内容。
4. 处理用户输入与表单提交
Web 应用的一个常见需求是处理用户的输入。接下来我们将添加一个表单页面,用户可以在其中输入名字并提交,后端接收数据后返回问候语。
添加新页面:templates/form.html
<!DOCTYPE html><html lang="zh-CN"><head> <meta charset="UTF-8"> <title>输入你的名字</title></head><body> <h3>请输入你的名字:</h3> <form action="/greet" method="POST"> <input type="text" name="username" placeholder="输入你的名字"> <input type="submit" value="提交"> </form></body></html>
添加问候页面:templates/greeting.html
<!DOCTYPE html><html lang="zh-CN"><head> <meta charset="UTF-8"> <title>问候</title></head><body> <h1>你好,{{ name }}!</h1> <p>欢迎来到我们的网站。</p></body></html>
修改 app.py
以处理 POST 请求
from flask import Flask, render_template, requestapp = Flask(__name__)@app.route('/')def home(): return render_template('index.html')@app.route('/form')def show_form(): return render_template('form.html')@app.route('/greet', methods=['POST'])def greet(): username = request.form.get('username') return render_template('greeting.html', name=username)if __name__ == '__main__': app.run(debug=True)
现在你可以访问 http://127.0.0.1:5000/form 来填写表单并提交,系统会跳转到问候页面。
5. 数据持久化:使用 SQLite 存储用户信息
为了使我们的应用更加实用,我们可以引入数据库来存储用户提交的信息。这里我们使用 SQLite,它是 Python 自带的一种轻量级数据库。
安装 SQLite 扩展(可选)
虽然 Python 标准库自带了 sqlite3,但如果你需要更高级的操作,可以考虑使用 SQLAlchemy 或 Flask-SQLAlchemy。
pip install flask-sqlalchemy
修改 app.py
使用数据库
from flask import Flask, render_template, requestfrom flask_sqlalchemy import SQLAlchemyapp = Flask(__name__)app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///users.db'app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = Falsedb = SQLAlchemy(app)class User(db.Model): id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(80), unique=True, nullable=False)@app.route('/')def home(): return render_template('index.html')@app.route('/form')def show_form(): return render_template('form.html')@app.route('/greet', methods=['POST'])def greet(): username = request.form.get('username') # 检查是否已存在该用户 existing_user = User.query.filter_by(name=username).first() if not existing_user: new_user = User(name=username) db.session.add(new_user) db.session.commit() return render_template('greeting.html', name=username)@app.route('/users')def list_users(): users = User.query.all() return render_template('users.html', users=users)if __name__ == '__main__': with app.app_context(): db.create_all() # 创建数据库表 app.run(debug=True)
添加用户列表页面:templates/users.html
<!DOCTYPE html><html lang="zh-CN"><head> <meta charset="UTF-8"> <title>用户列表</title></head><body> <h3>所有用户:</h3> <ul> {% for user in users %} <li>{{ user.name }}</li> {% endfor %} </ul></body></html>
现在你可以访问 http://127.0.0.1:5000/users 查看所有提交过名字的用户。
6. 总结
通过本文的学习,我们完成了以下内容:
搭建了一个基于 Flask 的 Web 应用;实现了 HTML 页面的渲染;掌握了表单提交与数据处理;引入了 SQLite 数据库进行数据持久化;使用 Flask-SQLAlchemy 简化数据库操作。当然,这只是 Web 开发的冰山一角。在实际项目中,我们还需要考虑安全性(如 CSRF 防护)、用户认证、前端框架整合等更复杂的问题。但希望这篇文章能为你入门 Python Web 开发提供一个良好的起点。
参考资料:
Flask 官方文档Flask-SQLAlchemy 文档Jinja2 模板文档