一、FBV与CBV
在我们日常学习Django中,都是用的FBV(function base views)方式,就是在视图中用函数处理各种请求。而CBV(class base view)则是通过类来处理请求。
Python是一个面向对象的编程语言,如果只用函数来开发,有很多面向对象的优点就错失了(继承、封装、多态)。所以Django在后来加入了Class-Based-View。可以让我们用类写View。
这样做的优点主要下面两种:
- 提高了代码的复用性,可以使用面向对象的技术,比如Mixin(多继承)
- 可以用不同的函数针对不同的HTTP方法处理,而不是通过很多if判断,提高代码可读性;
二、示例
1、urls.py
python
from django.urls import path
from app01 import views
urlpatterns = [
# path('admin/', admin.site.urls),
#FBV路由写法,基于函数
path('auth/', views.auth),
#CBV写法,基于类的路由写法
path('user/',views.UserView.as_view()),
2、views.py
python
from django.http import JsonResponse
from django.views import View
#FBV的写法
def auth(request):
if request.method == "GET":
return JsonResponse({"status":True,"message":"GET"})
elif request.method == "POST":
return JsonResponse({"status": True, "message": "POST"})
return JsonResponse({"status":True,"message":"..."})
#CBV写法
class UserView(View):
def get(self,request):
return JsonResponse({"status":True,"message":"get"})
def post(self,request):
return JsonResponse({"status":True,"message":"post"})
def put(self,request):
return JsonResponse({"status": True, "message": "put"})
def delete(self,request):
return JsonResponse({"status": True, "message": "delete"})