Django视图函数之FBV与CBV模式

FBV模式:

FBVfunction base views 就是在视图里使用函数处理请求。

一般直接用函数写的都属于是FBV模式。

veiws.py

 1 from django.shortcuts import render,HttpResponse
 2 # Create your views here.
 3  
 4 def login(request):
 5     if request.method=="GET":
 6         return render(request,"login.html")
 7     elif request.method=="POST":
 8         if request.POST.get("username")=="yang" and request.POST.get("userpsd")=="123":
 9             return render(request,"login_success.html",{"name":request.POST.get("username")})
10         else:
11             return  HttpResponse("账号或密码有误!")

 

      urls.py

1 from django.conf.urls import url
2 from django.contrib import admin
3 from app01 import views
4  
5 urlpatterns = [
6     # url(r'^admin/', admin.site.urls),
7     url(r'^login', views.login),
8 ]

 

CBV模式:

CBVclass base views 就是在视图里使用类处理请求。

1.    自定义的类必须继承View父类

2.    提高了代码的复用性,可以使用面向对象的技术,比如Mixin(多继承)

3.    可以用不同的函数针对不同的HTTP方法处理,而不是通过很多if判断,提高代码可读性

4.    CBV模式继承的View类提供了多种请求方式对应的响应函数不需要在进行判断,可以直接在子类重写继承的方法

5.    CBV模式子类继承重写父类请求方式的响应函数通过父类dispatch方法进行反射分发

6.    urls.py路由系统中必须使用Myview.as_view()替代视图函数

     veiws.py

 

  

 1 from django.shortcuts import render,HttpResponse
 2 from django.views import View
 3  
 4 class Myview(View):
 5     
 6     # 可以对父类的dispatch方法重,在分发函数执行前后加上响应功能类比装饰器
 7     # def dispatch(self, request, *args, **kwargs):
 8     #     ret=super().dispatch(request, *args, **kwargs)
 9     #     return ret
10  
11     def get(self, request):
12         return render(request, "login.html")
13  
14     def post(self, request):
15         if request.method == "GET":
16             return render(request, "login.html")
17         elif request.method == "POST":
18             if request.POST.get("username") == "yang" and request.POST.get("userpsd") == "123":
19                 return render(request, "login_success.html", {"name": request.POST.get("username")})
20             else:
21                 return HttpResponse("账号或密码有误!")

 

 

     urls.py

1 from django.conf.urls import url
2 from django.contrib import admin
3 from app01 import views
4  
5 urlpatterns = [
6     # url(r'^admin/', admin.site.urls),
7     url(r'^login', views.Myview.as_view()),    
8 ]
原文地址:https://www.cnblogs.com/open-yang/p/11221383.html