侧边栏壁纸
博主头像
ZOUXS的空间博主等级

人生苦短,我学python

  • 累计撰写 23 篇文章
  • 累计创建 24 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

DRF(Django REST Framework)知识点

zouxs
2026-05-22 / 0 评论 / 0 点赞 / 4 阅读 / 6562 字
温馨提示:
本文最后更新于 2026-05-22,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

目录(点击跳转)

  1. 认证体系
  2. 权限控制
  3. 接口限流
  4. 序列化器
  5. 分页、过滤、搜索、排序
  6. DRF 高频面试扩展知识点

1. 认证体系

1.1 三种认证方式对比

  1. Session 认证

    • 基于 Cookie + 服务端存储 Session
    • 适合:前后端不分离、单服务、后台管理
    • 缺点:分布式/跨域不方便,依赖 Cookie
  2. Token 认证

    • 客户端携带 Token 请求
    • 服务端查询 Token 有效性
    • 适合:前后端分离、多端登录
  3. JWT 认证(最常用)

    • 自包含令牌,无需查库验证
    • 无状态、支持分布式、跨域友好
    • 适合:微服务、前后端分离、第三方对接

1.2 JWT 标准结构

  • Header:算法(如 HS256)+ 令牌类型
  • Payload:用户ID、过期时间、权限(不存敏感信息)
  • Signature:签名,防篡改
  • 格式:Header.Payload.Signature

1.3 续签机制

  • AccessToken 短期(15-30分钟)
  • RefreshToken 长期(7天)
  • 过期用 RefreshToken 换新,提升安全性

1.4 黑名单机制

  • 登出/强制下线:将 Token 加入黑名单(Redis存储)
  • 每次请求校验是否在黑名单
  • 解决 JWT 无法主动作废问题

1.5 面试必背要点

  • JWT 不存敏感信息(密码、手机号)
  • 必须用 HTTPS 防止劫持
  • 敏感接口必须二次校验

2. 权限控制

2.1 DRF 内置权限类

  • AllowAny:完全开放
  • IsAuthenticated:已登录
  • IsAdminUser:管理员
  • IsAuthenticatedOrReadOnly:登录可写,未登录只读

2.2 自定义权限类

  • 继承 BasePermission
  • 重写 has_permission 方法
  • 可根据用户、角色、IP、接口、参数灵活控制

2.3 RBAC 权限模型(企业级必用)

  1. 用户表 → 关联角色
  2. 角色表 → 关联权限
  3. 权限表 → 菜单/按钮/接口
  4. 粒度:菜单权限 → 页面权限 → 按钮权限 → 接口权限 → 数据权限

2.4 医疗项目权限实践

  • 分级审核:普通用户、审核员、管理员、超级管理员
  • 数据隔离:只能看自己/本部门数据
  • 操作留痕:所有权限操作记录日志

3. 限流

3.1 作用

  • 防止暴力攻击、爬虫、刷接口
  • 保护服务器稳定性
  • 避免恶意请求压垮服务

3.2 内置限流类

  • AnonRateThrottle:未登录用户限流
  • UserRateThrottle:登录用户限流

3.3 配置格式

  • default_rate = '30/minute' 每分钟30次
  • 支持:second、minute、hour、day

3.4 扩展方案

  • 全局限流 + 接口自定义限流
  • 敏感接口(登录、支付)加强限流
  • 结合 Redis 实现分布式限流

4. 序列化器

4.1 核心作用

  • 模型 → JSON(响应)
  • JSON → 模型(请求)
  • 全自动数据校验(必填、类型、长度、格式)

4.2 to_representation 自定义返回

  • 重写该方法,自定义返回字段结构
  • 拼接字段、翻译枚举、格式化时间、嵌套展示
  • 不影响入库逻辑,只改输出格式

4.3 validate 字段校验

  • 单字段校验:validate_字段名
  • 全局校验:validate
  • 自定义规则:手机号、身份证、唯一性、业务逻辑校验
  • 校验失败直接抛异常,返回前端

4.4 create / update 重写

  • 自定义入库逻辑
  • 处理关联数据、额外字段、状态变更、日志记录
  • 支持事务、分布式锁

4.5 序列化优化(面试必问)

  • 严禁在序列化里写查询语句(导致N+1)
  • 关联查询必须在视图层用 select_related/prefetch_related
  • 只读字段用 read_only_fields
  • 只写字段用 write_only_fields

5. 分页、过滤、搜索、排序

5.1 分页

  • PageNumberPagination:页码分页(最常用)
  • LimitOffsetPagination:偏移量分页
  • CursorPagination:游标分页(大数据、高并发)

5.2 过滤

  • 依赖 django-filter
  • 支持:精确、模糊、范围、时间、多字段联合过滤
  • 适合:列表查询、条件筛选

5.3 搜索

  • SearchFilter
  • 指定支持搜索的字段
  • 模糊匹配,适合快速检索

5.4 排序

  • OrderingFilter
  • 指定可排序字段
  • 支持正序、倒序

6. DRF 高频面试扩展知识点

6.1 全局异常处理

  • 统一捕获:API 异常、ORM 异常、校验异常、业务异常
  • 统一返回格式:code + msg + data
  • 日志记录,方便排查

6.2 接口文档自动生成

  • drf-yasgdrf-spectacular
  • 自动生成 Swagger 文档
  • 无需手动维护

6.3 版本控制

  • URL 或 Header 控制版本
  • 兼容新旧接口,平滑升级

6.4 响应封装

  • 统一返回结构
  • 成功/失败固定格式
  • 前端易于处理

6.5 企业最佳实践

  • JWT 认证 + RBAC 权限
  • 全局异常 + 统一响应
  • 限流 + 日志 + 审计
  • 序列化严格校验

相关链接

0

评论区