• 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 ]
  • 相关阅读:
    WEB前端第十九课——雪碧图&滑动门
    近期网上资源收集(一)
    飞利浦 PHILIPS 电动牙刷HX6730 拆解
    webvtt字幕转srt字幕的python程序(附改名程序)
    [转载]Core Elements of a Program
    反正也没人看
    open read split
    蛋疼的二分法死循环
    leetcode ex3 找出穿过最多点的直线 Max Points on a Line
    leetcode AC1 感受
  • 原文地址:https://www.cnblogs.com/open-yang/p/11221383.html
Copyright © 2020-2023  润新知