实测 Session 的五种存储后端:数据各放在哪里(表 / 缓存 / 文件 / cookie);signed_cookies 的数据不保密、超过 4 KB 浏览器丢弃(8000 字符 → 6231 字节);读写耗时:db 读 0.26 / 写 0.83 ms,cache 读 0.09 / 写 0.12 ms。
实测改密码为什么让其他设备下线:session 里的 _auth_user_hash 由密码哈希派生,每个请求重新比对;改密码后所有会话失效(含当前),用 update_session_auth_hash 保住当前设备;把同一明文重新哈希也会踢掉所有会话;只改 last_login 不影响。
实测 Django 消息框架:默认 FallbackStorage 先放 cookie(用完即删,读完 cookie 被置为过期);默认最低级别 INFO,debug() 被丢弃;只有遍历才算用过;随机内容下 cookie 放不下时(2 条 × 3000 字符)转存到 session;三种存储各自放哪里。
实测 Django 模板加载器:同名模板时 DIRS 优先、再按 INSTALLED_APPS 顺序;TemplateDoesNotExist 的 tried 列表列出所有尝试位置;cached 加载器让每次 get_template 从 1.17 ms 降到 0.0010 ms,且 DEBUG 开关不影响默认使用 cached。
实测上下文处理器:只对 RequestContext(render(request, …))运行、render_to_string 不带 request 时不运行;每次渲染各运行一遍(include 不重复);后面的覆盖前面的、视图 context 优先;一个 5 ms 的处理器让空模板渲染从 0.010 ms 变成 6.41 ms。
实测 Django 模板自动转义:五个字符的转义结果;safe / mark_safe / autoescape off;safe 之后接 upper 会再次被转义;href=javascript: 不会被拦截、<script> 里的变量需要 json_script;不加引号的属性可被截断;format_html 安全而 mark_safe + 拼接是 XSS。
实测自定义模板过滤器:参数只能有一个;is_safe / needs_autoescape 与自动转义的配合;过滤器里的异常原样抛出;同一表达式写两次调用两次、for 里每次迭代一次,{% with %} 可缓存;不 {% load %} 会报 Invalid filter。
实测自定义模板标签:simple_tag 的参数与 as 变量;返回普通字符串会被转义、mark_safe 拼接未转义参数会 XSS;takes_context 读写上下文(循环里的写入循环外不可见);inclusion_tag 默认不带外层变量;20 处调用的渲染耗时:变量 25 µs、simple_tag 29 µs、inclusion_tag 201 µs。
实测模板继承与 block 渲染:三层继承里子覆盖父、block.super 取上一层;父链里不存在的 block 被忽略、重名 block 报错;继承层数 = 读盘次数(无 cached);include 与 extends 的差别;1/2/3 层继承渲染 5.3/10.8/21.5 µs。
实测 collectstatic:从 STATICFILES_DIRS 与各 app 的 static 收集,同名文件 STATICFILES_DIRS 优先再按 INSTALLED_APPS 顺序;增量复制比较修改时间且忽略亚秒精度(同一秒内改的文件会被漏掉);旧文件不自动删除,--clear / --dry-run / --link / -i 的行为;缺 STATIC_ROOT 报错。
实测 ManifestStaticFilesStorage:文件名加内容 MD5 前 12 位、staticfiles.json 映射;CSS 里的 url() 与 @import 被改写,外部 URL 与 data: 保持不变;内容变名字变(缓存失效);DEBUG=False 时清单缺项直接 ValueError;manifest_strict = False 的边界。
在 runserver 与 gunicorn(有无 WhiteNoise)下看静态 / 媒体文件的响应头:开发只有 Last-Modified;DEBUG=False 无 WhiteNoise 静态文件 404;WhiteNoise 给带哈希文件 max-age=315360000, public, immutable、原名 max-age=60;gzip 31600→219、br 75 字节;条件请求 304;MEDIA 不被提供。