你是不是还在为每个视图函数里写一大堆if request.method == 'GET'...和if request.method == 'POST'...而感到头大?感觉代码又臭又长,像个裹脚布?别急,CBV就是来拯救你于水火之中的“瑞士军刀”!
想象一下,你是个餐厅服务员。在函数视图(FBV)的世界里,客人每说一句话(一个HTTP请求),你都得先猜他到底是想点菜(GET)还是已经决定好了要下单(POST)。
# 传统的函数视图 (FBV) - 像个忙碌的服务员
def order_view(request):
if request.method == 'GET':
# 展示菜单
menu = Menu.objects.all()
return render(request, 'menu.html', {'menu': menu})
elif request.method == 'POST':
# 处理点单
dish_name = request.POST.get('dish_name')
order = Order.objects.create(dish=dish_name)
return redirect('order_success')
看到了吗?全是if...else!如果再来个PUT、DELETE,这函数就得胖成球了。
而现在,CBV来了!它说:“别那么累,我们把不同的活儿分给不同的人(方法)去干。”
# 基于类的视图 (CBV) - 像个有明确分工的团队
from django.views import View
from django.shortcuts import render, redirect
class OrderView(View):
def get(self, request):
# 专门处理GET请求:展示菜单
menu = Menu.objects.all()
return render(request, 'menu.html', {'menu': menu})
def post(self, request):
# 专门处理POST请求:处理点单
dish_name = request.POST.get('dish_name')
order = Order.objects.create(dish=dish_name)
return redirect('order_success')
在urls.py中,我们需要使用.as_view()方法把这个类“变成”Django能认识的视图函数:
# urls.py
from .views import OrderView
urlpatterns = [
path('order/', OrderView.as_vi

最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



