路由只负责“把人领到窗口”。
真正处理请求的,是 View。
先写三个最基本的窗口:
from django.http import HttpResponse
from django.shortcuts import get_object_or_404, render
from .models import Permit
def index(request):
permits = Permit.objects.order_by("-created_at")[:20]
return render(request, "permits/index.html", {"permits": permits})
def detail(request, pk):
permit = get_object_or_404(Permit, pk=pk)
return render(request, "permits/detail.html", {"permit": permit})
def healthcheck(request):
return HttpResponse("central district is running")一个 View 的职责很朴素:
- 收到
request - 取参数
- 调业务
- 查数据
- 返回响应
你可以把它想成窗口职员:
市民提交请求
│
▼
窗口职员读取资料(request)
│
├── 看 URL 参数
├── 看查询参数
├── 看表单数据
├── 看登录用户
└── 看请求方法 GET / POST
▼
决定下一步
│
├── render 模板
├── redirect 重定向
├── 返回 JSON
└── 抛 404 / 403实际开发时,View 最容易犯的错是变成“超级窗口”:
- 一边做参数解析
- 一边写大段业务判断
- 一边拼数据库查询
- 一边决定页面展示细节
这样写一阵子,窗口就会变成垃圾堆。
稳妥原则是:
- View 负责调度
- 复杂查询放到模型方法、管理器或服务层
- 展示逻辑放模板
- 输入校验放表单
- 权限控制放认证/权限层
如果你刚开始学 Django,先把函数视图吃透。类视图当然很强,但先把“窗口在干什么”理解清楚,比一上来套继承体系更重要。