FBV模式:
FBV(function 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模式:
CBV(class 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 ]