Flask 在线练习(长文解析)
💡一则或许对你有用的小广告
欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论
- 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于
Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...
,点击查看项目介绍 ;- 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;
截止目前, 星球 内专栏累计输出 82w+ 字,讲解图 3441+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 2900+ 小伙伴加入学习 ,欢迎点击围观
在数字化时代,Web 开发已成为开发者必备的核心技能之一。Flask 在线练习为编程学习者提供了一条高效、灵活的学习路径。作为轻量级的 Python Web 框架,Flask 以简洁的 API 设计和模块化扩展能力,成为入门级开发者和中级工程师的首选工具。本文将通过循序渐进的方式,结合实际案例,带读者从基础概念到实战部署,系统性地掌握如何通过 Flask 构建在线练习项目,并深入理解其核心原理。
环境搭建与基础概念
Python 环境准备
在开始 Flask 在线练习 之前,需确保已安装 Python 3.7+ 环境。对于新手,推荐使用 Python 官网 下载安装包,并勾选 "Add Python to PATH" 选项。安装完成后,通过命令行验证版本:
python --version
虚拟环境管理
为避免项目依赖冲突,建议使用 venv
或 conda
创建虚拟环境。以 venv
为例:
python -m venv flask_env
source flask_env/bin/activate # Linux/MacOS
flask_env\Scripts\activate # Windows
安装 Flask
通过 pip
安装核心库:
pip install Flask
第一个 Flask 程序
创建 app.py
文件,输入以下代码:
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello Flask!"
if __name__ == "__main__":
app.run(debug=True)
运行 python app.py
,访问 http://localhost:5000
,即可看到 "Hello Flask!" 的欢迎页面。
路由与视图函数
路由机制解析
Flask 的 @app.route
装饰器将 URL 路径映射到视图函数。例如:
@app.route("/about")
def about():
return "这是关于页面"
访问 http://localhost:5000/about
时,将触发 about()
函数并返回内容。
动态路由与参数传递
通过 <变量名>
声明动态路径:
@app.route("/user/<username>")
def show_user_profile(username):
return f"用户 {username} 的资料页面"
访问 http://localhost:5000/user/John
将显示 "用户 John 的资料页面"。
HTTP 方法处理
通过 methods
参数指定请求类型:
@app.route("/login", methods=["GET", "POST"])
def login():
if request.method == "POST":
return "处理登录请求"
else:
return "显示登录表单"
此案例展示了如何区分 GET/POST 请求,为表单提交场景提供支持。
模板引擎与静态文件管理
模板基础:Jinja2
Flask 默认集成 Jinja2 模板引擎,支持变量渲染和逻辑控制。创建 templates/index.html
文件:
<!DOCTYPE html>
<html>
<head><title>首页</title></head>
<body>
<h1>{{ greeting }}</h1>
<ul>
{% for item in items %}
<li>{{ item }}</li>
{% endfor %}
</ul>
</body>
</html>
在视图函数中传递数据:
from flask import render_template
@app.route("/")
def index():
return render_template(
"index.html",
greeting="欢迎来到Flask世界",
items=["Python", "Django", "Flask"]
)
静态资源引用
将 CSS/JS 文件存放于 static/
目录,通过 url_for
引用:
<link rel="stylesheet" href="{{ url_for('static', filename='styles.css') }}">
表单处理与用户交互
原始表单提交
创建 templates/login.html
:
<form method="POST" action="/login">
<input type="text" name="username" placeholder="用户名">
<input type="password" name="password" placeholder="密码">
<button type="submit">登录</button>
</form>
在视图函数中处理数据:
from flask import request
@app.route("/login", methods=["GET", "POST"])
def login():
if request.method == "POST":
username = request.form["username"]
password = request.form["password"]
# 验证逻辑...
return f"登录成功:{username}"
return render_template("login.html")
表单验证与 WTForms
引入 WTForms 库实现更专业的表单处理:
from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField
from wtforms.validators import DataRequired
class LoginForm(FlaskForm):
username = StringField("用户名", validators=[DataRequired()])
password = PasswordField("密码", validators=[DataRequired()])
@app.route("/login", methods=["GET", "POST"])
def login():
form = LoginForm()
if form.validate_on_submit():
# 处理提交逻辑
return "验证通过"
return render_template("login.html", form=form)
在模板中渲染表单:
<form method="POST">
{{ form.hidden_tag() }}
{{ form.username.label }} {{ form.username() }}
{{ form.password.label }} {{ form.password() }}
<button>提交</button>
</form>
数据库集成与 ORM 实践
SQLite 快速入门
通过 sqlite3
模块操作数据库:
import sqlite3
def get_db():
conn = sqlite3.connect("data.db")
return conn
@app.route("/create-table")
def create_table():
conn = get_db()
conn.execute(
"CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY, name TEXT)"
)
conn.commit()
return "表创建成功"
SQLAlchemy ORM 框架
安装扩展:
pip install flask-sqlalchemy
定义模型类:
from flask_sqlalchemy import SQLAlchemy
app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///data.db"
db = SQLAlchemy(app)
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(80), nullable=False)
def __repr__(self):
return f"<User {self.name}>"
实现增删改查:
@app.route("/add-user/<name>")
def add_user(name):
user = User(name=name)
db.session.add(user)
db.session.commit()
return f"用户 {name} 添加成功"
@app.route("/users")
def list_users():
users = User.query.all()
return render_template("users.html", users=users)
数据库迁移与版本控制
使用 Flask-Migrate
实现迁移:
flask db init
flask db migrate -m "Initial migration"
flask db upgrade
错误处理与调试技巧
自定义错误页面
@app.errorhandler(404)
def page_not_found(e):
return render_template("404.html"), 404
@app.errorhandler(500)
def internal_server_error(e):
return "服务器内部错误", 500
调试模式与日志记录
启用调试模式:
app.run(debug=True) # 自动重新加载并显示详细错误信息
集成日志:
import logging
logging.basicConfig(level=logging.DEBUG)
部署实战:将应用上线
本地服务器配置
安装 gunicorn
或 waitress
:
pip install gunicorn
gunicorn app:app
云平台部署示例(以 Heroku 为例)
- 创建
Procfile
文件:web: gunicorn app:app
- 初始化 Git 仓库并提交代码:
git init git add . git commit -m "Initial commit"
- 部署到 Heroku:
heroku create git push heroku master
结论
通过本文的 Flask 在线练习 指南,读者已掌握了从基础概念到实战部署的完整技术链条。建议结合以下步骤深化学习:
- 分阶段练习:从简单路由开始,逐步加入模板、表单、数据库等组件;
- 构建完整项目:例如开发一个带用户认证的待办事项应用;
- 参与开源社区:在 GitHub 或 GitLab 上贡献 Flask 相关项目;
- 持续学习扩展:探索 Flask-Login、Flask-RESTful 等扩展库。
记住,编程能力的提升源于实践。通过不断编写代码、调试问题、优化架构,Flask 将成为你构建 Web 应用的得力工具。现在就开始你的第一个 Flask 在线练习 项目吧!