1. Django视图与URL路由基础解析
作为Django开发中最核心的两个组件,视图和URL路由构成了Web应用的骨架系统。我在多个电商和内容管理系统的开发实践中发现,合理设计这两部分能显著提升项目的可维护性和扩展性。
视图(View)本质上是一个Python可调用对象,它接收Web请求(HttpRequest)并返回Web响应(HttpResponse)。这种设计哲学体现了Django的"明确优于隐晦"原则。在实际项目中,我通常会将视图分为三类:
- 函数视图:适合简单逻辑处理
- 类视图:适合复用性高的场景
- 视图集(ViewSets):配合DRF构建API时使用
python复制# 函数视图示例
from django.http import HttpResponse
from django.views import View
def function_view(request):
return HttpResponse("Function-based view")
# 类视图示例
class ClassView(View):
def get(self, request):
return HttpResponse("Class-based view")
经验提示:新项目建议优先使用类视图,它们提供了更好的扩展性和代码组织方式。我在重构旧项目时,将函数视图逐步迁移到类视图后,代码量平均减少了30%。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 视图系统深度剖析
2.1 函数视图的实战技巧
虽然类视图已成主流,但函数视图在某些场景下仍有其优势。特别是在快速原型开发阶段,函数视图的简洁性无可替代。
python复制from django.shortcuts import render, get_object_or_404
def article_detail(request, slug):
article = get_object_or_404(Article, slug=slug)
context = {
'article': article,
'related_articles': Article.objects.filter(
category=article.category
).exclude(id=article.id)[:3]
}
return render(request, 'blog/detail.html', context)
这个示例展示了几个关键技巧:
- 使用
get_object_or_404替代直接的get()查询,自动处理不存在的记录 - 通过上下文变量传递模板所需数据
- 在单个查询中处理主记录和相关记录
避坑指南:我曾在一个高流量新闻站点遇到N+1查询问题,后来通过
select_related和prefetch_related优化,将页面加载时间从2s降到200ms。
2.2 类视图的进阶用法
Django内置的通用类视图是真正的生产力工具。以DetailView为例,它封装了常见的对象详情展示模式:
python复制from django.views.generic import DetailView
from .models import Product
class ProductDetailView(DetailView):
model = Produ
