AI 掘金头条小项目
常见工程结构
Section titled “常见工程结构”把每个业务功能的接口拆分到独立的文件当中,再统一挂载到主应用中。
router = APIRouter(prefix="/api/news", tags=["news"])跨域资源共享 CORS
Section titled “跨域资源共享 CORS”cors是一种浏览器安全机制,用于运行在一个源的web应用,通过浏览器向另一个源的服务器发起跨域HTTP请求,并在服务器授权的前提下获取资源。(浏览器的安全机制,只允许同源请求)
同源的三个条件:协议、域名、端口
服务端全局配置CORS中间件,解决跨域问题。
用户访问令牌
Section titled “用户访问令牌”验证用户是否登录
Token是服务器发给客户端的一段字符串,用来在后续请求中证明已经登录过了,解决HTTP是无状态的问题,在每次请求中 自我证明身份
在请求中的位置是请求头:Authorization: Bearer <token>
Authorization: 专门用来放身份信息 Bearer: 表示持有者令牌 < Token>: 真正的身份凭证
用户密码加密
Section titled “用户密码加密”passlib 哈希加密
CryptContext(schemes=[“bacrpt])
封装通用成功响应格式
Section titled “封装通用成功响应格式”抽取响应结果:
缓存与Redis
Section titled “缓存与Redis”在fastapi中通常在应用层使用redis内存数据存储器作为缓存。
配置
import redis.asyncio as redis
REDIS_HOST = "203.0.113.10" #主机地址REDIS_PORT = 6379 # 端口REDIS_DB = 0 #数据库编号 0~15# decode_responses 字符串转码redis_client = redis.Redis(host=REDIS_HOST, port=REDIS_PORT, db=REDIS_DB, decode_responses=True)封装缓存操作
围绕redis做 存、取、删、判断、过期 等操作,让数据访问更快、数据库压力更小
redis存储 key - value
setex、get、delete、exists
旁路缓存策略:一种常见的缓存策略。核心概念是应用程序主动管理缓存,读取数据时先检查缓存,若缓存没数据则从数据库或其他数据源加载数据,并将数据存入缓存,当数据更新或删除时,也更新缓存数据
缓存时间的设定规则:分类、配置 7200 列表 600 详情1800 验证码 120 数据越稳定,缓存越持久。 避免缓存全部一致,导致缓存雪崩。同一时刻缓存全都没有,导致数据库压力仍然很大。
缓存key 需要保持唯一性