Python 现代开发学习笔记

(二十七)从失败页面追到具体环节

表单 422 先看字段错误和本次绑定值;403 再区分 CSRF 来源、操作权限或书籍归属。用户可以登录但后台看不到书籍入口时,继续查 is_staff、组与模型权限;不能把登录成功当作全部授权。

页面有正确字段,数据库却提示缺列时,对照模型、迁移和当前实例文件。查不到刚才保存的书,也先核对是否换了用户、筛选条件、页码或 READING_INSTANCE。

渲染很慢时,先单独统计书籍查询段。循环中访问关联、模板中执行新的筛选、没有使用已预取结果,都能从 SQL 数量中看到。保留同一份输出比较,再判断优化是否正确。

# 续写同一文件:reading_project/src/library/views.py
def error_page(request, exception=None):
    # 403 页面使用固定提示,不回显内部异常信息。
    return render(
        request, "error.html", {"message": "当前账号不能执行这个操作"}, status=403
    )

handler403 在总路由登记这个视图,为权限拒绝显示固定页面;用户输入继续按普通文字转义。Django 的调试页面与部署错误页面根据配置选择,排查记录中的状态要与正在使用的设置对应。

<!-- 项目文件:reading_project/src/library/templates/error.html -->
{% extends 'base.html' %}
{% block title %}操作未完成{% endblock %}
{% block content %}<section class="panel form-panel"><h1>操作未完成</h1><p role="alert">{{ message }}</p>
<a href="{% url 'library:index' %}">返回书架</a></section>{% endblock %}
按字段、认证、权限、迁移、实例文件与 SQL 次数逐项追踪,找到第一处差异后留下失败请求和最终数据库结果

笔记正文与全部题解 · Ctrl / ⌘ K