Python之Flask快速入门
Python Flask 快速入门指南
- Flask 是一款轻量级的 Python Web 框架,以其简洁、灵活的特点深受开发者喜爱,尤其适合快速构建小型 Web 应用、API 接口或原型项目。本指南将从环境搭建到实战开发,带你快速掌握 Flask 的核心用法。
- 视频资料:
https://pan.quark.cn/s/8048e6e25670
、https://pan.quark.cn/s/aae0c994b9d2
一、环境准备
在使用 Flask 前,需先完成 Python 环境配置和 Flask 安装。
1. 确认 Python 环境
Flask 支持 Python 3.8 及以上版本(截至 2024 年 5 月,推荐使用 3.10+)。
打开终端/命令行,输入以下命令验证 Python 是否安装成功:
python --version # Windows 系统
# 或
python3 --version # macOS/Linux 系统
若输出类似 Python 3.11.4
的信息,说明 Python 环境正常。
2. 安装 Flask
推荐使用 虚拟环境(避免依赖冲突)安装 Flask,步骤如下:
步骤 1:创建虚拟环境
- Windows(CMD/PowerShell):
# 新建项目文件夹(例如 flask-demo) mkdir flask-demo && cd flask-demo # 创建虚拟环境(venv 是虚拟环境名称,可自定义) python -m venv venv # 激活虚拟环境 venv\Scripts\activate
- macOS/Linux(终端):
# 新建项目文件夹 mkdir flask-demo && cd flask-demo # 创建虚拟环境 python3 -m venv venv # 激活虚拟环境 source venv/bin/activate
激活成功后,终端提示符前会显示 (venv)
,表示当前处于虚拟环境中。
步骤 2:安装 Flask
在虚拟环境中,使用 pip
安装 Flask:
pip install flask
安装完成后,输入 flask --version
验证,若输出类似以下信息则安装成功:
Flask 2.3.3
Python 3.11.4 (main, Jun 12 2023, 15:11:40) [GCC 11.2.0]
二、第一个 Flask 应用:Hello World
Flask 应用的核心是「应用实例」,所有路由、视图函数都依赖于这个实例。下面编写一个最简单的 Flask 应用。
1. 编写代码
在 flask-demo
文件夹中,新建文件 app.py
,输入以下代码:
# 从 flask 库中导入 Flask 类
from flask import Flask# 创建 Flask 应用实例(__name__ 表示当前模块名,Flask 会据此查找资源路径)
app = Flask(__name__)# 定义路由:当用户访问根路径(/)时,触发下方的视图函数
@app.route('/')
def hello_world():# 视图函数的返回值会作为响应内容返回给浏览器return 'Hello, Flask!'# 当脚本直接运行时(而非被导入),启动 Flask 开发服务器
if __name__ == '__main__':app.run(debug=True) # debug=True 开启调试模式(代码修改后自动重启服务器)
2. 运行应用
在终端(确保处于虚拟环境和 flask-demo
文件夹下)输入以下命令:
python app.py
若运行成功,终端会输出类似信息:
* Serving Flask app 'app'* Debug mode: on
WARNING: This is a development server. Do not use it in a production deployment.* Running on http://127.0.0.1:5000
Press CTRL+C to quit* Restarting with stat* Debugger is active!* Debugger PIN: 123-456-789
3. 访问应用
打开浏览器,输入地址 http://127.0.0.1:5000
(或 http://localhost:5000
),页面会显示 Hello, Flask!
,表示第一个应用运行成功。
三、核心概念解析
Flask 的核心功能围绕「路由」「视图函数」「模板」「请求与响应」展开,理解这些概念是开发的基础。
1. 路由(Route)
路由是 URL 路径与视图函数的映射关系,通过 @app.route('/路径')
装饰器定义。
例如:
# 访问 /about 时,触发 about 函数
@app.route('/about')
def about():return '这是关于页面'# 访问 /user/xxx 时,xxx 会作为参数传入函数(<变量名> 定义动态参数)
@app.route('/user/<username>')
def show_user(username):return f'欢迎你,{username}!'# 限定参数类型(int 表示只能接收整数)
@app.route('/post/<int:post_id>')
def show_post(post_id):return f'文章 ID:{post_id}'
运行应用后,访问 http://127.0.0.1:5000/user/张三
会显示 欢迎你,张三!
,访问 http://127.0.0.1:5000/post/123
会显示 文章 ID:123
。
2. HTTP 请求方法
默认情况下,@app.route
只接收 GET
请求。若需支持 POST
(表单提交)、PUT
等方法,需通过 methods
参数指定:
from flask import request # 导入 request 对象,用于获取请求数据@app.route('/login', methods=['GET', 'POST'])
def login():if request.method == 'POST':# 处理 POST 请求(例如获取表单数据)username = request.form.get('username') # 从表单中获取 usernamepassword = request.form.get('password')return f'登录请求:用户名={username}, 密码={password}'else:# 处理 GET 请求(例如返回登录表单页面)return '''<form method="post">用户名: <input type="text" name="username"><br>密码: <input type="password" name="password"><br><button type="submit">登录</button></form>'''
访问 http://127.0.0.1:5000/login
会显示登录表单,提交后会触发 POST
逻辑并返回表单数据。
3. 模板(Templates)
Flask 支持使用 Jinja2 模板引擎 渲染 HTML 页面,实现「逻辑与视图分离」。模板文件需放在项目根目录的 templates
文件夹中(Flask 会自动查找该目录)。
步骤 1:创建模板文件
在 flask-demo
中新建 templates
文件夹,再在其中新建 index.html
:
<!-- templates/index.html -->
<!DOCTYPE html>
<html>
<head><title>{{ title }}</title> <!-- Jinja2 变量:由视图函数传入 -->
</head>
<body><h1>欢迎来到 {{ name }} 的博客!</h1><!-- 循环渲染列表 --><ul>{% for post in posts %}<li>{{ post.title }} - {{ post.date }}</li>{% endfor %}</ul>
</body>
</html>
步骤 2:在视图函数中渲染模板
修改 app.py
,导入 render_template
函数,并编写视图函数:
from flask import render_template@app.route('/blog')
def blog():# 模拟数据(实际项目中可能来自数据库)blog_posts = [{'title': 'Flask 入门', 'date': '2024-05-01'},{'title': 'Jinja2 模板', 'date': '2024-05-02'},{'title': 'Flask 数据库', 'date': '2024-05-03'}]# 渲染模板:第一个参数是模板文件名,后续参数是传递给模板的变量return render_template('index.html', title='我的博客', name='小明', posts=blog_posts)
步骤 3:访问效果
运行应用后,访问 http://127.0.0.1:5000/blog
,会看到渲染后的 HTML 页面,包含动态传入的标题、用户名和文章列表。
4. 静态文件(Static Files)
CSS、JavaScript、图片等静态文件需放在 static
文件夹中(Flask 自动识别),在模板中通过 url_for('static', filename='路径')
引用。
示例:添加 CSS 样式
-
在
flask-demo
中新建static/css
文件夹,创建style.css
:/* static/css/style.css */ h1 {color: #2c3e50;text-align: center; } ul {list-style: none;width: 500px;margin: 0 auto; } li {padding: 8px;border-bottom: 1px solid #eee; }
-
在
templates/index.html
的<head>
中引用 CSS:<link rel="stylesheet" href="{{ url_for('static', filename='css/style.css') }}">
-
刷新
http://127.0.0.1:5000/blog
,会看到页面样式已生效。
5. 请求与响应
Flask 提供 request
和 response
对象处理 HTTP 交互:
-
request:封装客户端发送的请求数据,常用属性/方法:
request.method
:请求方法(GET/POST 等)request.args
:获取 URL 参数(如/search?keyword=flask
中的keyword
)request.form
:获取表单数据(POST 请求)request.files
:获取上传的文件
-
response:控制服务器返回的响应,常用方式:
- 直接返回字符串(自动转为 200 OK 响应)
- 使用
render_template
返回 HTML 响应 - 使用
redirect(url)
重定向(如登录成功后跳转到首页) - 使用
make_response
自定义响应(如设置 Cookie、响应头)
示例:URL 参数与重定向
from flask import request, redirect, url_for# 处理 URL 参数(/search?keyword=xxx)
@app.route('/search')
def search():keyword = request.args.get('keyword', '默认关键词') # 第二个参数是默认值return f'搜索关键词:{keyword}'# 重定向示例
@app.route('/old-path')
def old_path():# 重定向到 /blog 路径(url_for('blog') 会自动生成 /blog 的 URL)return redirect(url_for('blog'))
四、常用扩展推荐
Flask 本身功能精简,可通过扩展实现复杂需求,以下是常用扩展:
扩展名称 | 功能描述 | 安装命令 |
---|---|---|
Flask-SQLAlchemy | ORM 工具,简化数据库操作(支持 MySQL、SQLite 等) | pip install flask-sqlalchemy |
Flask-WTF | 处理表单验证(防 CSRF 攻击、字段验证等) | pip install flask-wtf |
Flask-Login | 管理用户登录状态(登录、注销、记住密码等) | pip install flask-login |
Flask-Migrate | 数据库迁移工具(更新表结构时保留数据) | pip install flask-migrate |
Flask-RESTful | 快速构建 RESTful API 接口 | pip install flask-restful |
五、部署注意事项
开发阶段使用 app.run(debug=True)
启动的是开发服务器,性能差、不安全,不能用于生产环境。生产环境推荐使用以下方案:
-
使用 Gunicorn 作为 WSGI 服务器(适用于 Linux/macOS):
# 安装 Gunicorn pip install gunicorn # 启动应用(app:app 表示从 app.py 中导入 app 实例,--workers 4 表示4个进程) gunicorn -w 4 -b 0.0.0.0:5000 app:app
-
搭配 Nginx 作为反向代理:处理静态文件、负载均衡、SSL 加密等,提升性能和安全性。
-
关闭 Debug 模式:生产环境中必须设置
debug=False
,避免泄露代码和敏感信息。