Skip to content

第 15 章 时区、国际化与常用中间件 ​

学习目标 ​

学完本章,你应该能:

  1. 理解时区处理的重要性和 fba 的方案
  2. 了解国际化(i18n)的基本用法
  3. 认识 CORS、限流、Trace ID 等常用中间件

一、时区处理 ​

为什么时区是老大难 ​

后端项目常遇到"时间不对"的问题:服务器 UTC 时间、数据库时区、用户本地时区三者不一致,导致显示时间错乱。

fba 的解决方案 ​

fba 提供了全局自定义时区处理:

python
# 配置全局时区
DATETIME_TIMEZONE = 'Asia/Shanghai'
# 时间格式
DATETIME_FORMAT = '%Y-%m-%d %H:%M:%S'

fba 内置了 timezone.now 等工具函数,统一处理时区,避免各处各写各的时区逻辑。

要点:所有时间相关操作统一使用 fba 提供的时区工具,不要自己到处 datetime.now()。

时区问题的根源 ​

二、国际化(i18n) ​

i18n(internationalization)指让应用支持多语言。比如错误提示,中国用户看中文,海外用户看英文。

fba 内置了国际化支持:

  • 语言包存放在 backend/locale/ 目录
  • 配置默认语言:
python
I18N_DEFAULT_LANGUAGE = 'zh-CN'

响应信息(如错误提示)会根据语言环境自动切换。

国际化工作流程 ​

三、CORS(跨域) ​

跨域:前端和后端部署在不同域名/端口时,浏览器的安全机制会阻止请求。解决方法是配置 CORS(跨域资源共享)。

fba 内置 CORS 配置:

python
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)