Django Views 知识总结
1. 概述
- Django 的视图负责接收请求并返回响应,连接用户的输入和后端逻辑。
- 主要分为两种视图:
- 函数视图(Function-Based Views,FBV)。
- 类视图(Class-Based Views,CBV)。
2. 函数视图(FBV)
(1)定义方式
- 一个普通的 Python 函数,用于接收
HttpRequest
对象并返回HttpResponse
对象。
(2)示例代码
from django.http import HttpResponse
def my_view(request):
if request.method == "GET":
return HttpResponse("This is a GET request")
elif request.method == "POST":
return HttpResponse("This is a POST request")
else:
return HttpResponse("Unsupported HTTP method", status=405)
(3)优点与缺点
- 优点:简单直观,逻辑集中在一个函数中。
- 缺点:不适合复杂场景,逻辑容易变得混乱。
3. 类视图(CBV)
(1)定义方式
- 使用 Django 提供的
View
类或其子类,通过方法实现视图逻辑。
(2)示例代码
from django.http import HttpResponse
from django.views import View
class MyView(View):
def get(self, request):
return HttpResponse("This is a GET request")
def post(self, request):
return HttpResponse("This is a POST request")
(3)优点与缺点
- 优点:
- 提供方法分离(
get
、post
等),逻辑更清晰。 - 易于扩展和复用。
- 提供方法分离(
- 缺点:
- 初学者理解起来稍复杂。
- 对于简单逻辑可能显得繁琐。
4. 通用视图(Generic Views)
(1)定义
- Django 提供的内置类视图,简化常见操作如 CRUD(增删改查)。
(2)常见通用视图
-
TemplateView:渲染模板。
from django.views.generic import TemplateView class HomePageView(TemplateView): template_name = "home.html"
-
ListView:展示对象列表。
from django.views.generic import ListView from myapp.models import MyModel class MyModelListView(ListView): model = MyModel template_name = "mymodel_list.html"
-
DetailView:展示单个对象详情。
from django.views.generic import DetailView from myapp.models import MyModel class MyModelDetailView(DetailView): model = MyModel template_name = "mymodel_detail.html"
-
CreateView:创建新对象。
-
UpdateView:更新对象。
-
DeleteView:删除对象。
5. URL 配置与视图关联
(1)函数视图关联
from django.urls import path
from .views import my_view
urlpatterns = [
path("my-view/", my_view, name="my_view"),
]
(2)类视图关联
- 使用
.as_view()
方法。
from django.urls import path
from .views import MyView
urlpatterns = [
path("my-view/", MyView.as_view(), name="my_view"),
]
6. 请求与响应处理
(1)接收请求
request
对象包含:request.method
:HTTP 方法。request.GET
和request.POST
:查询参数和表单数据。request.user
:当前用户对象。
(2)返回响应
- 常见响应类型:
- HttpResponse:返回纯文本或 HTML。
- JsonResponse:返回 JSON 数据。
- HttpResponseRedirect:返回重定向。
7. 中间件与装饰器
(1)装饰器
- 用于添加额外功能,如权限检查。
from django.contrib.auth.decorators import login_required
@login_required
def my_view(request):
return HttpResponse("This view requires login")
(2)中间件
- 全局处理请求或响应的钩子,例如日志记录、身份验证。
8. 小结
- 函数视图适合简单场景,类视图更适合复杂逻辑。
- 通用视图通过封装常见模式,提高开发效率。
- 理解视图与 URL 配置的关联以及请求响应机制是核心。