一、什么是Flask?¶
在开始之前,我们先来理解一下“Web框架”是什么。简单来说,Web框架就是帮你快速开发网站或Web应用的工具集合,它封装了很多重复的工作(比如处理HTTP请求、路由管理、模板渲染等),让你专注于业务逻辑。
Flask是一个轻量级的Python Web框架,由Armin Ronacher开发。它的特点是:
- 轻量灵活:没有强制的项目结构和组件,你可以按需添加功能。
- 学习成本低:语法简洁,适合初学者快速上手。
- 扩展性强:可以通过扩展(如Flask-SQLAlchemy处理数据库、Flask-Login处理用户认证)实现更复杂的功能。
如果你想快速搭建一个小型网站、API接口,或者作为学习Web开发的起点,Flask是非常好的选择。
二、环境搭建¶
安装Flask¶
首先确保你的电脑已经安装了Python(推荐Python 3.6+)。打开命令行工具,执行以下命令安装Flask:
pip install flask
安装完成后,可以通过以下命令验证是否安装成功:
flask --version
如果显示类似 Flask 2.3.3, Python 3.9.7 的信息,说明安装成功。
三、第一个Flask应用¶
编写“Hello World”¶
创建一个新的Python文件(比如 app.py),写入以下代码:
from flask import Flask
# 创建Flask应用实例
app = Flask(__name__)
# 定义路由:当访问根路径 '/' 时,执行下面的函数
@app.route('/')
def index():
return "Hello, Flask!" # 返回响应内容
# 启动应用(仅在直接运行该文件时生效)
if __name__ == '__main__':
app.run(debug=True) # debug=True 开启调试模式(开发时用,生产环境关闭)
运行应用¶
在命令行中进入 app.py 所在的目录,执行:
python app.py
然后打开浏览器访问 http://127.0.0.1:5000,你会看到页面显示 Hello, Flask!。
代码解析¶
Flask(__name__):创建应用实例,__name__是Python内置变量,表示当前模块的名称,Flask用它来定位资源路径。@app.route('/'):路由装饰器,将URL路径/与下面的函数index()绑定。当用户访问/时,会自动执行index()函数。app.run(debug=True):启动Flask开发服务器,debug=True会在代码修改后自动重启服务器,并显示错误信息(生产环境需关闭)。
四、路由与视图函数¶
基本路由¶
路由是URL与函数的映射关系。除了根路径 /,你还可以定义其他路径:
@app.route('/about') # 访问 http://127.0.0.1:5000/about
def about():
return "关于我们的页面"
@app.route('/user/<username>') # 带参数的路由,<username> 是动态参数
def user_profile(username):
return f"欢迎 {username} 的个人主页"
访问 http://127.0.0.1:5000/user/张三,页面会显示 欢迎 张三 的个人主页。
路由参数类型¶
Flask支持多种参数类型,比如整数、浮点数、路径等:
@app.route('/post/<int:post_id>') # post_id 必须是整数
def show_post(post_id):
return f"你查看的文章ID是:{post_id}"
@app.route('/path/<path:subpath>') # 包含斜杠的路径
def show_path(subpath):
return f"路径参数:{subpath}"
五、模板引擎(Jinja2)¶
静态的HTML页面无法满足动态内容需求,Flask使用Jinja2模板引擎来渲染动态HTML。
创建模板文件¶
- 在项目根目录下创建一个
templates文件夹(Flask会自动识别该文件夹)。 - 在
templates中新建index.html文件,内容如下:
<!DOCTYPE html>
<html>
<head>
<title>{{ title }}</title> <!-- 渲染变量 -->
</head>
<body>
<h1>Hello, {{ name }}!</h1> <!-- 渲染name变量 -->
{% if age > 18 %} <!-- 条件判断 -->
<p>你已成年</p>
{% else %}
<p>你未成年</p>
{% endif %}
<ul>
{% for item in hobbies %} <!-- 循环 -->
<li>{{ item }}</li>
{% endfor %}
</ul>
</body>
</html>
在视图函数中渲染模板¶
修改 app.py,使用 render_template 渲染模板:
from flask import Flask, render_template
app = Flask(__name__)
@app.route('/')
def index():
# 传递数据给模板
data = {
'title': '首页',
'name': '小明',
'age': 20,
'hobbies': ['编程', '阅读', '运动']
}
return render_template('index.html', **data) # **data 表示解包字典
if __name__ == '__main__':
app.run(debug=True)
现在访问 http://127.0.0.1:5000,页面会根据传递的变量动态渲染内容。
六、静态文件处理¶
网站的图片、CSS、JavaScript等静态资源需要放在 static 文件夹中。
示例:引入CSS文件¶
- 在项目根目录创建
static文件夹,再在static中创建style.css:
h1 {
color: red;
font-size: 24px;
}
- 在
templates/index.html中引入CSS:
<head>
<title>{{ title }}</title>
<!-- 引入静态文件:url_for('static', filename='style.css') -->
<link rel="stylesheet" href="{{ url_for('static', filename='style.css') }}">
</head>
此时页面的标题文字会变成红色,说明CSS生效了。
七、处理请求与响应¶
获取请求参数¶
Flask通过 request 对象获取请求数据(需先导入):
from flask import request, render_template
@app.route('/greet', methods=['GET', 'POST']) # 允许GET和POST请求
def greet():
if request.method == 'POST': # 判断请求方法
name = request.form.get('name') # 获取POST表单数据
return render_template('greet.html', name=name)
else:
return render_template('greet.html') # GET请求返回空表单
返回JSON和重定向¶
- 返回JSON:使用
jsonify(需导入):
from flask import jsonify
@app.route('/api/data')
def api_data():
data = {'name': 'Flask', 'version': '2.3.3'}
return jsonify(data) # 返回JSON格式数据
- 重定向:使用
redirect(需导入):
from flask import redirect, url_for
@app.route('/old')
def old_page():
return redirect(url_for('index')) # 重定向到index页面
八、综合小项目示例¶
创建一个简单的“个人博客首页”,包含以下功能:
- 显示欢迎信息和用户列表
- 支持用户提交留言(POST请求)
- 渲染动态内容(使用模板)
步骤1:修改模板结构¶
在 templates 中新增 blog.html:
<!DOCTYPE html>
<html>
<head>
<title>我的博客</title>
<link rel="stylesheet" href="{{ url_for('static', filename='style.css') }}">
</head>
<body>
<h1>{{ blog_title }}</h1>
<h2>用户列表</h2>
<ul>
{% for user in users %}
<li>{{ user }}</li>
{% endfor %}
</ul>
{% if message %} <!-- 显示留言 -->
<div class="message">{{ message }}</div>
{% endif %}
<form method="POST">
<input type="text" name="username" placeholder="输入用户名">
<button type="submit">提交</button>
</form>
</body>
</html>
步骤2:编写视图函数¶
修改 app.py:
from flask import Flask, render_template, request
app = Flask(__name__)
@app.route('/blog', methods=['GET', 'POST'])
def blog():
users = ['张三', '李四', '王五'] # 模拟用户列表
message = None # 留言内容
if request.method == 'POST':
username = request.form.get('username')
message = f"收到留言:{username} 提交了信息!"
return render_template('blog.html',
blog_title='个人博客',
users=users,
message=message)
if __name__ == '__main__':
app.run(debug=True)
效果演示¶
访问 http://127.0.0.1:5000/blog,可以看到用户列表,并能通过表单提交留言(留言会动态显示在页面上)。
九、总结与进阶方向¶
恭喜你完成了Flask入门!现在你已经掌握了:
- Flask的安装与基本使用
- 路由、视图函数、模板渲染
- 静态文件和模板引擎
- 请求参数处理和响应返回
后续学习方向:¶
- 数据库操作:学习Flask-SQLAlchemy(ORM工具)
- 用户认证:Flask-Login实现登录注册
- RESTful API:使用Flask-RESTful构建接口
- 部署上线:Gunicorn + Nginx 部署生产环境
Flask的官方文档(https://flask.palletsprojects.com/)是最好的学习资源,多动手实践才能快速掌握!