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

ScreenShot_2025-12-13_111807_047

三、第一个 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)

image
运行后访问http://127.0.0.1:5000/,即可看到页面显示 “Hello Flask! 这是我的第一个 Web 应用”。

四、路由系统(URL 与视图的映射)
路由是 “URL 路径 → 视图函数” 的映射,通过@app.route()装饰器实现。

  1. 静态路由
    匹配固定 URL:
# 匹配URL: /about
@app.route('/about')
def about():
    return '这是关于页面'
···
![image](https://img2024.cnblogs.com/blog/3734371/202512/3734371-20251213115357084-818144731.png)
![image](https://img2024.cnblogs.com/blog/3734371/202512/3734371-20251213115420392-896850530.png)

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

image

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

image

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

在代码开头新增request导入
image

五、视图函数与响应
视图函数是处理请求、返回响应的核心,支持多种响应方式:

  1. 基础响应(字符串 / 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)

image

六、请求与响应处理
通过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)。

posted @ 2025-12-13 12:44  锋随雾起  阅读(8)  评论(0)    收藏  举报