第 15 章 时区、国际化与常用中间件
学习目标
学完本章,你应该能:
- 理解时区处理的重要性和 fba 的方案
- 了解国际化(i18n)的基本用法
- 认识 CORS、限流、Trace ID 等常用中间件
一、时区处理
为什么时区是老大难
后端项目常遇到"时间不对"的问题:服务器 UTC 时间、数据库时区、用户本地时区三者不一致,导致显示时间错乱。
fba 的解决方案
fba 提供了全局自定义时区处理:
# 配置全局时区
DATETIME_TIMEZONE = 'Asia/Shanghai'
# 时间格式
DATETIME_FORMAT = '%Y-%m-%d %H:%M:%S'fba 内置了 timezone.now 等工具函数,统一处理时区,避免各处各写各的时区逻辑。
要点:所有时间相关操作统一使用 fba 提供的时区工具,不要自己到处
datetime.now()。
时区问题的根源
二、国际化(i18n)
i18n(internationalization)指让应用支持多语言。比如错误提示,中国用户看中文,海外用户看英文。
fba 内置了国际化支持:
- 语言包存放在
backend/locale/目录 - 配置默认语言:
I18N_DEFAULT_LANGUAGE = 'zh-CN'响应信息(如错误提示)会根据语言环境自动切换。
国际化工作流程
三、CORS(跨域)
跨域:前端和后端部署在不同域名/端口时,浏览器的安全机制会阻止请求。解决方法是配置 CORS(跨域资源共享)。
fba 内置 CORS 配置:
CORS_ALLOWED_ORIGINS = ['http://127.0.0.1:8000'] # 允许的来源前后端分离部署时,务必正确配置 CORS,否则前端请求会被浏览器拦截。
跨域问题示意
四、请求限流(Rate Limit)
防止接口被恶意刷或过载,fba 内置了请求频率限制:
- 基于 Redis 记录请求频率
- 可限制某接口/某用户在单位时间内的请求次数
配置相关项以 REQUEST_LIMITER_ 开头。
五、Trace ID(全链路追踪)
排查问题时,最头疼的是"一个请求经过了多个服务,日志散落各处,无法串联"。
fba 内置 Trace ID:每个请求生成一个唯一 ID,贯穿整个请求链路,日志里都带上这个 ID,排查问题时用 Trace ID 一搜就能还原完整链路。
社区评价:
"有 Trace ID,排查问题少绕很多路。"
Trace ID 的作用
六、操作日志与登录日志
fba 内置了完善的日志系统:
- 操作日志:记录正常/异常操作(谁、什么时候、做了什么)
- 登录日志:追踪登录行为(登录成功/失败、IP 等)
相关配置以 OPERA_LOG_ 开头,支持敏感字段脱敏。
七、其他实用中间件速览
| 能力 | 说明 |
|---|---|
| 分页(pagination) | 列表接口统一分页参数 |
| 数据权限(data-permission) | 控制用户可见的数据范围 |
| Socket.IO | 实时通信(WebSocket) |
| SSO | 单点登录 |
| OAuth 2.0 | 第三方授权登录(GitHub、Google) |
| 多租户(tenant) | 支持多租户隔离 |
这些属于更进阶的专题,用到时再查官方文档对应章节即可。
八、请求经过的中间件关卡
一个请求从进来到返回,会经过这些"关卡":
本章小结
关键要点回顾:
- 时区:统一用 fba 的时区工具,配置 DATETIME_TIMEZONE
- 国际化:语言包在 locale/ 目录,配置默认语言
- CORS:前后端分离必配,否则请求被拦截
- Trace ID:全链路追踪,排查问题利器
- 内置操作日志、登录日志,支持脱敏
到这里,进阶能力篇结束。 从第 16 章开始进入工程化与部署篇。
对应官方文档:
时区(backend/reference/timezone.html)、国际化(backend/reference/i18n.html)、CORS(backend/reference/CORS.html)、限流(backend/reference/limit.html)