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+ 小伙伴加入学习 ,欢迎点击围观
前言:为什么选择 Flask 作为 Web 开发入门框架?
在众多 Python Web 框架中,Flask 凭借其简洁性、灵活性和低学习门槛,成为编程初学者和中级开发者入门的首选工具。它如同一把轻便的瑞士军刀,既能快速搭建原型系统,又能通过扩展库实现复杂功能。对于编程新手来说,Flask 的核心代码直观易懂,适合理解 Web 开发的基本原理;对于中级开发者,则能通过其模块化设计快速完成项目迭代。本文将以 Flask 教程 为核心,从环境搭建到高级功能,循序渐进地展示如何利用 Flask 构建完整的 Web 应用。
Flask 教程:环境搭建与基础路由
安装与项目结构
首先需要安装 Flask,通过 pip 命令即可完成:
pip install Flask
创建一个简单的项目文件夹,例如 my_flask_app
,并在其中新建 app.py
文件。一个最基础的 Flask 应用结构如下:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
return 'Hello World from Flask!'
if __name__ == '__main__':
app.run()
这里 @app.route('/')
定义了根路径的路由规则,hello()
函数返回响应内容。运行 python app.py
后,访问 http://localhost:5000
即可看到输出。
路由参数与动态 URL
路由的灵活性是 Flask 的核心优势之一。通过 <变量名>
可以捕获动态路径参数:
@app.route('/user/<username>')
def show_user_profile(username):
return f'User: {username}'
若需指定参数类型,可添加类型声明(如 <int:user_id>
),系统会自动将字符串转换为对应类型:
@app.route('/post/<int:post_id>')
def show_post(post_id):
return f'Post ID: {post_id}'
请求方法与表单处理
HTTP 方法控制路由的行为。例如,methods=['POST']
限制路由仅接收 POST 请求:
from flask import request
@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
username = request.form['username']
return f'Logged in as {username}'
return '''<form method="post">
Username: <input type=text name=username>
<input type=submit value=Login>
</form>'''
Flask 教程:模板引擎与静态文件管理
模板基础:Jinja2 的语法解析
Flask 默认使用 Jinja2 模板引擎,通过 render_template
函数渲染模板文件。在项目根目录创建 templates
文件夹,存放 HTML 文件:
from flask import render_template
@app.route('/hello/<name>')
def hello_template(name):
return render_template('hello.html', username=name)
对应的 hello.html
内容如下:
<!DOCTYPE html>
<html>
<head><title>Hello Page</title></head>
<body>
<h1>Hello, {{ username }}!</h1>
</body>
</html>
宏与继承:构建可复用的模板结构
通过 {% extends %}
实现模板继承,减少重复代码。例如定义基础模板 base.html
:
<!-- base.html -->
<html>
<head>
<title>{% block title %}{% endblock %}</title>
</head>
<body>
{% block content %}{% endblock %}
</body>
</html>
子模板继承后可覆盖区块:
<!-- child.html -->
{% extends "base.html" %}
{% block title %}My Page{% endblock %}
{% block content %}
<h1>Welcome to My Page</h1>
{% endblock %}
静态文件的组织方式
静态资源(CSS、JS、图片)应存放在 static
文件夹内。在模板中引用时,使用 url_for
生成路径:
return render_template('index.html')
<!-- index.html -->
<link rel="stylesheet" href="{{ url_for('static', filename='css/main.css') }}">
<img src="{{ url_for('static', filename='img/logo.png') }}">
Flask 教程:表单验证与用户会话管理
使用 WTForms 进行表单验证
WTForms 是 Flask 的推荐表单库,通过类定义和验证器实现复杂验证逻辑:
from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField
from wtforms.validators import InputRequired, Email
class LoginForm(FlaskForm):
username = StringField('Username', validators=[InputRequired()])
password = PasswordField('Password', validators=[InputRequired()])
在视图函数中集成表单验证:
@app.route('/login', methods=['GET', 'POST'])
def login():
form = LoginForm()
if form.validate_on_submit():
return f'Logged in as {form.username.data}'
return render_template('login.html', form=form)
会话管理:安全持久化用户状态
Flask 的 session
对象基于签名 cookie,需设置密钥:
app.secret_key = 'your_secret_key_here'
保存和读取会话数据示例:
from flask import session
@app.route('/login', methods=['POST'])
def login():
session['user_id'] = 123
return 'Logged in'
@app.route('/profile')
def profile():
user_id = session.get('user_id')
return f'User ID: {user_id}'
Flask 教程:数据库集成与 ORM 使用
SQLAlchemy 的基本操作
安装扩展库:
pip install Flask-SQLAlchemy
配置数据库连接并定义模型:
from flask_sqlalchemy import SQLAlchemy
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///mydatabase.db'
db = SQLAlchemy(app)
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(80), unique=True, nullable=False)
执行数据库操作:
db.create_all()
new_user = User(name='Alice')
db.session.add(new_user)
db.session.commit()
user = User.query.filter_by(name='Alice').first()
RESTful API 开发实践
通过 Flask-RESTful
扩展快速构建 API:
from flask_restful import Api, Resource
api = Api(app)
class UserAPI(Resource):
def get(self, user_id):
user = User.query.get_or_404(user_id)
return {'name': user.name}
api.add_resource(UserAPI, '/api/users/<int:user_id>')
Flask 教程:进阶功能与性能优化
蓝图(Blueprint)的模块化设计
使用蓝图划分功能模块:
from flask import Blueprint
auth = Blueprint('auth', __name__)
@auth.route('/login')
def login():
return 'Login View'
app.register_blueprint(auth, url_prefix='/auth')
调试与部署准备
开发阶段启用调试模式:
app.run(debug=True)
生产环境部署可使用 Gunicorn:
pip install gunicorn
gunicorn app:app
性能优化技巧
- 使用
Flask-Caching
缓存频繁访问的数据 - 配置 Nginx 反向代理和静态文件服务
- 通过
Flask-Profiler
进行性能分析
结论:Flask 的学习路径与应用场景
通过本文的 Flask 教程,我们从基础到进阶,系统性地学习了路由设计、模板引擎、表单验证、数据库集成等核心功能。对于初学者,建议从简单 CRUD 应用开始,逐步尝试 RESTful API 和多模块项目;中级开发者则可深入扩展库的使用,探索 Celery 异步任务、Flask-Security 权限控制等高级功能。
Flask 的灵活性使其适用于多种场景,包括小型企业网站、API 后端、数据分析仪表盘等。随着项目复杂度的提升,开发者可根据需求选择合适扩展,逐步构建出高性能、可维护的 Web 应用。记住,最好的学习方式是动手实践——现在就尝试用 Flask 构建自己的第一个项目吧!