Pythonstudy——week4
Flask 入门与 API 基础
一、Flask 是什么?
Flask 是轻量级 Python Web 框架,特点是简洁、灵活,适合快速开发 Web 应用和 API,核心仅保留基础功能,可通过扩展实现复杂需求(如数据库、认证等)。
核心特点:
轻量极简:Flask 核心仅依赖两个库:
Werkzeug:处理 HTTP 协议、路由匹配、请求 / 响应封装等底层 Web 逻辑;
Jinja2:Python 模板引擎,支持动态渲染 HTML 页面。
无强制的项目结构、无内置的数据库 / 表单验证等,开发者可自由选择工具栈。
灵活扩展:通过官方 / 第三方扩展可快速扩展功能,比如:
Flask-SQLAlchemy:ORM 工具,操作 MySQL/PostgreSQL 等数据库;
Flask-WTF:表单验证与 CSRF 保护;
Flask-Login:用户认证;
Flask-RESTful:快速开发 RESTful API。
开发友好:内置开发服务器、调试模式,支持热重载,上手成本极低。
WSGI 兼容:遵循 WSGI 标准,可部署到 Gunicorn、uWSGI 等生产服务器,也支持配合 Nginx 反向代理。
二、Flask 安装步骤
建议先创建虚拟环境(避免依赖冲突),再安装:
# 1. 创建并激活虚拟环境(Windows示例)
python -m venv flask_env
flask_env\Scripts\activate
# 2. 安装Flask
pip install flask

三、第一个 Flask 应用
编写最小的 Flask 应用(保存为app.py):
# 导入Flask类
from flask import Flask
# 创建Flask应用实例:__name__表示当前模块名,用于确定应用根目录
app = Flask(__name__)
# 路由装饰器:将URL路径"/"映射到视图函数hello()
@app.route('/')
def hello():
# 视图函数返回响应内容(字符串会自动转为HTTP响应)
return 'Hello Flask! 这是我的第一个Web应用'
# 启动开发服务器:debug=True开启自动重载+错误调试(生产环境禁用)
if __name__ == '__main__':
app.run(debug=True)

运行后访问http://127.0.0.1:5000/,即可看到页面显示 “Hello Flask! 这是我的第一个 Web 应用”。
四、路由系统(URL 与视图的映射)
路由是 “URL 路径 → 视图函数” 的映射,通过@app.route()装饰器实现。
- 静态路由
匹配固定 URL:
# 匹配URL: /about
@app.route('/about')
def about():
return '这是关于页面'
···


2. 动态路由(带参数)
支持传递 URL 参数,可指定参数类型(如int、string):
```python
# 在这里添加新代码(比如动态路由)
@app.route('/user/<username>') # 新增路由:匹配 /user/xxx 路径
def show_user_profile(username):
# 返回包含用户名的响应
return f'用户 {username} 的个人主页'

@app.route('/post/<int:post_id>') # 新增路由:匹配 /post/数字 路径
def show_post(post_id):
return f'文章ID:{post_id}'

- 指定 HTTP 请求方法
默认仅支持GET请求,可通过methods参数指定支持的方法:
# 同时支持GET和POST请求
@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
# 处理POST请求(如表单提交)
return '处理登录请求'
else:
# 处理GET请求(如显示登录页面)
return '显示登录页面'
在代码开头新增request导入

五、视图函数与响应
视图函数是处理请求、返回响应的核心,支持多种响应方式:
- 基础响应(字符串 / JSON)
from flask import jsonify
# 返回字符串(自动转为HTTP响应)
@app.route('/')
def hello():
return 'Hello World'
# 返回JSON响应(用jsonify自动设置响应头为application/json)
@app.route('/api/data')
def get_data():
data = {'name': '豆包', 'age': 18}
return jsonify(data)

六、请求与响应处理
通过request对象获取请求数据(需先导入):
from flask import request
@app.route('/submit', methods=['POST'])
def submit():
# 1. 获取GET参数(如URL中的?name=豆包)
name = request.args.get('name')
# 2. 获取POST表单数据(如<form>提交的内容)
username = request.form.get('username')
# 3. 获取JSON数据(如前端AJAX提交的JSON)
json_data = request.json # 返回字典类型
return f'收到请求:name={name}, username={username}'
七、Web 请求 - 响应周期
Flask 处理请求的完整流程:
用户通过浏览器 / 客户端发送HTTP 请求(如访问http://127.0.0.1:5000/)
Flask 接收请求,解析 URL、请求方法、请求数据
根据 URL 匹配对应的路由,找到关联的视图函数
执行视图函数,处理请求并生成响应(内容、状态码、响应头)
Flask 将响应返回给用户,用户看到页面 / 数据
八、RESTful API 基础
RESTful 是一种 Web API 的设计风格,核心是 “用 HTTP 方法表示操作”:
GET:获取资源(如查询用户列表)
POST:创建资源(如新增用户)
PUT:更新资源(如修改用户信息)
DELETE:删除资源(如删除用户)
Flask 实现简单 RESTful 接口示例
from flask import Flask, jsonify, request
app = Flask(__name__)
# 模拟用户数据
users = [{'id': 1, 'name': '张三'}, {'id': 2, 'name': '李四'}]
# GET:获取所有用户
@app.route('/api/users', methods=['GET'])
def get_users():
return jsonify({'users': users})
# GET:获取单个用户(修正路由格式)
@app.route('/api/users/<int:user_id>', methods=['GET']) # 改为单个左尖括号<
def get_user(user_id):
# 查找匹配的用户(修正语法:添加括号)
user = next((u for u in users if u['id'] == user_id), None)
# 修正:返回元组时补充右括号
return jsonify({'user': user}) if user else ('用户不存在', 404)
# POST:创建用户(修正语法:补充引号和括号)
@app.route('/api/users', methods=['POST'])
def create_user():
# 从请求JSON中获取name(确保请求头Content-Type为application/json)
new_user = {
'id': len(users) + 1,
'name': request.json['name'] # 补充右引号和右括号
}
users.append(new_user)
return jsonify({'user': new_user}), 201 # 201表示创建成功
if __name__ == '__main__':
app.run(debug=True)
获取所有用户:访问 http://127.0.0.1:5000/api/users(GET 请求),返回:
{"users": [{"id": 1, "name": "张三"}, {"id": 2, "name": "李四"}]}
获取单个用户:访问 http://127.0.0.1:5000/api/users/1(GET 请求),返回:
{"user": {"id": 1, "name": "张三"}}
创建用户:用工具(如 Postman)发送 POST 请求到 http://127.0.0.1:5000/api/users,请求体为:
{"name": "王五"}
返回创建的用户数据(状态码 201)。

浙公网安备 33010602011771号