Flask 入门教程:Python 轻量级 Web 框架快速上手
Flask 是一个用 Python 编写的轻量级 Web 应用框架。由于其'微'性质,Flask 在提供核心服务的同时,仍然提供了许多扩展的可能性。在这篇文章中,我们将从最基础开始,深入学习如何使用 Flask 构建一个功能完善的 Web 应用。
Flask 是 Python 编写的轻量级 Web 应用框架,以其灵活性和扩展性著称。本文涵盖安装配置、路由映射、模板渲染、请求处理、静态文件管理及数据库集成等核心内容。通过虚拟环境隔离依赖,使用 Jinja2 引擎实现动态页面,结合 SQLAlchemy 进行数据持久化操作。同时介绍了配置文件管理、错误处理机制及基础安全实践,帮助开发者从零构建生产级 Web 服务,适合 Python 初学者快速掌握后端开发技能。

Flask 是一个用 Python 编写的轻量级 Web 应用框架。由于其'微'性质,Flask 在提供核心服务的同时,仍然提供了许多扩展的可能性。在这篇文章中,我们将从最基础开始,深入学习如何使用 Flask 构建一个功能完善的 Web 应用。
首先,建议创建一个独立的虚拟环境以避免依赖冲突。
python -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
接着,使用 pip 安装 Flask 库:
pip install flask
为了增强功能,通常还会安装 SQLAlchemy 用于数据库操作:
pip install flask-sqlalchemy
编写一个最基础的 Flask 应用,包含一个主路由和对应的视图函数:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def home():
return "Hello, Flask!"
if __name__ == "__main__":
# debug=True 允许自动重载和调试器
app.run(debug=True)
运行后访问 http://localhost:5000 即可看到效果。
在 Flask 中,路由是 URL 到 Python 函数的映射。这些函数被称为视图函数。视图函数返回的响应可以是 HTML 字符串、重定向、JSON 数据或自定义状态码。
@app.route('/')
def index():
return "Home Page"
@app.route('/about')
def about():
return "About Page"
支持将 URL 中的变量作为参数传递给视图函数:
@app.route('/user/<username>')
def show_user(username):
return f'User: {username}'
@app.route('/post/<int:post_id>')
def show_post(post_id):
return f'Post ID: {post_id}'
默认只接受 GET 请求,可以通过 methods 参数指定:
@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
# 处理登录逻辑
pass
else:
# 显示登录表单
pass
Flask 使用 Jinja2 模板引擎。你可以在模板中使用变量、控制结构和继承等功能。
from flask import render_template
@app.route('/hello/<name>')
def hello(name):
return render_template('hello.html', name=name)
模板文件需放在 templates 文件夹内。
在 hello.html 中可以使用如下语法:
<!DOCTYPE html>
<html>
<head><title>{{ title }}</title></head>
<body>
<h1>Hello {{ name }}!</h1>
{% if name == 'Admin' %}
<p>Welcome back, Admin.</p>
{% endif %}
</body>
</html>
在视图函数中,你可以通过 request 对象来访问请求数据,包括查询参数、表单数据、JSON 负载等。
from flask import request, jsonify
@app.route('/api/data', methods=['POST'])
def get_data():
# 获取 JSON 数据
data = request.get_json()
username = data.get('username')
# 返回 JSON 响应
return jsonify({'status': 'success', 'user': username})
默认情况下,Flask 在应用的 /static 目录中寻找静态文件(CSS、JS、图片)。
from flask import url_for
# 在模板中引用静态文件
<link rel="stylesheet" href="{{ url_for('static', filename='style.css') }}">
在生产环境中,通常需要持久化数据。Flask-SQLAlchemy 提供了便捷的 ORM 支持。
from flask_sqlalchemy import SQLAlchemy
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///example.db'
db = SQLAlchemy(app)
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True, nullable=False)
# 创建表
with app.app_context():
db.create_all()
Flask 支持通过字典或类来管理配置,便于区分开发、测试和生产环境。
class Config:
SECRET_KEY = os.environ.get('SECRET_KEY') or 'dev-key'
SQLALCHEMY_TRACK_MODIFICATIONS = False
app.config.from_object(Config)
自定义错误页面可以提升用户体验。
@app.errorhandler(404)
def page_not_found(e):
return render_template('404.html'), 404
开发完成后,不建议直接使用 app.run() 部署。应使用 WSGI 服务器如 Gunicorn 配合 Nginx。
gunicorn -w 4 -b 0.0.0.0:8000 app:app
以上涵盖了 Flask 的核心功能模块。希望这篇文章能够帮助初学者理解 Flask 并开始使用这个强大的 Web 框架进行实际项目开发。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online
通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online