用途:在实现、审查或升级 Django 应用及扩展时提供知识补丁,先做破坏性变更检查,再按任务加载所需主题参考。
主要能力与主题索引:upgrading.md(运行时与数据库最低版本、移除项、弃用、兼容边界、发布状态);orm-and-databases.md(复合键、表达式、查询、迁移、数据库选项、后端扩展 API);http-security-auth.md(CSP、内容协商、重定向、URL 生成、认证、会话、密码、DRF);tasks.md(任务声明、后端、入队、选项、序列化、事务、上下文、结果);templates-forms-admin.md(模板片段与标签、表单渲染、可访问性、admin 行为);email-and-feeds.md(现代邮件对象、附件、仅关键字调用、地址设置、feed 样式表);gis.md(几何 API、空间操作、GeoIP2、部件、后端支持);tooling-testing-serialization.md(shell 导入、命令、测试、分页、序列化器、脚手架、静态文件)。
必要用法要点:先读 upgrading.md 检查运行时与数据库支持,再排查被移除 API 与弃用项;自定义数据库后端、字段、查找、约束、邮件类、中间件或部件时先读对应扩展说明。当前系列要求 Python 3.12 或更新;用 STORAGES 与存储别名替代已移除的存储设置;停止使用 Meta.index_together、旧密码哈希器、已移除的 PostgreSQL CI 字段等;自定义 ORM SQL 参数以元组传入;自定义 Field.pre_save() 需幂等;自定义邮件子类适配标准库 EmailMessage;可选核心邮件参数用关键字传入;ModelAdmin.lookup_allowed() 覆盖需加 request 参数;format_html() 传参、BaseConstraint 用关键字参数。
复合主键:用 models.CompositePrimaryKey 声明虚拟主键,组件顺序决定元组语义,如 pk = models.CompositePrimaryKey("product_id", "order_id"),查询用 item = OrderLineItem.objects.get(pk=(1, "A755H"))。限制:迁移不能增删或转换复合主键及其组件,需单独改 schema 并显式同步迁移状态;外键、通用关系与 admin 不支持复合键模型;可复用代码检查 _meta.pk_fields;虚拟 pk 不出现在 ModelForm;Count("pk") 仅在数据库函数显式支持复合表达式时使用。
Tasks API:用 @django.tasks.task 声明,用 enqueue 入队而非直接调用,如 result = email_users.enqueue([1, 2])。内置 ImmediateBackend 同步执行、DummyBackend 只记录,生产需第三方后端与 worker。传 JSON 可往返的值,不传模型实例、datetime 或元组;依赖已提交行时用 transaction.on_commit() 入队;异步用 aenqueue()。
CSP:安装 ContentSecurityPolicyMiddleware 并配置 SECURE_CSP、SECURE_CSP_REPORT_ONLY 或两者,用 django.utils.csp.CSP 常量。仅报告策略本身不收集报告,需配置报告指令与接收端;渲染 nonce 前需加 CSP 上下文处理器;含每请求 nonce 的响应不要整页缓存;视图装饰器替换而非合并全局映射,空覆盖映射会禁用该视图的该头。
模板片段:用 {% partialdef filter_controls inline %} 定义,{% partial filter_controls %} 渲染;视图渲染单个片段可在模板名后加 #<partial-name>;成对标签实现只需渲染块内容时用 simple_block_tag()。
HTTP 与 ORM:request.get_preferred_type() 按服务器偏好顺序传可生成媒体类型,无匹配时处理 None;reverse()/reverse_lazy() 用 query= 与 fragment=;需保留方法与请求体的重定向传 preserve_request=True;测试客户端与请求工厂用 query_params=;URLField 对无 scheme 输入假定 HTTPS。values()/values_list() 投影顺序按调用处顺序;StringAgg 分隔符用 Value() 包裹;Aggregate.order_by 仅用于以 allow_order_by 选择加入的聚合类;分组需任意非空代表值时用 AnyValue;强制更新无行时捕获 Model.NotUpdated;异步用 AsyncPaginator 与 AsyncPage。
邮件与异步测试:优先 email.message.MIMEPart 处理内联等结构化附件;EmailMessage.message() 在现代策略下返回标准库消息类;附件与替代项按 Django 暴露的命名元组处理,替代项只用 attach_alternative() 添加。异步认证、权限、会话、分页与任务 API 用原生异步版本;method_decorator() 可直接包装异步视图方法;线程访问数据库用启用数据库的测试类;断言失败与 --pdb 停在调用测试帧;TransactionTestCase.setUpClass() 期间可用 fixture 数据;multiprocessing forkserver 下允许并行测试。
实施流程:定位受影响主题并加载参考文件;选择兼容方案前检查移除项与未来边界;区分核心支持与后端特定、选择加入能力;包装视图、中间件、认证或数据库工作时保留异步行为;改动扩展点后运行 Django 系统检查与针对性测试;仅状态操作时同时针对模型状态与数据库状态测试迁移;自定义 ORM 组件测试生成 SQL 与参数类型;在 HTTP 层验证安全头、nonce 唯一性、重定向与内容协商。
限制:以上为资料所列内容,未提供具体版本号、第三方后端名称、价格或平台信息。