zoukankan      html  css  js  c++  java
  • 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 ]
  • 相关阅读:
    LiteFlow 按照规则配置进行复杂流转
    ImageCombiner 服务端合图
    forest HTTP调用API框架
    smart-doc API文档生成工具
    YAML语法和用法
    拓展mybatisPlus 支持批量插入
    ModbusRTU控制SV660P说明
    .NET RulesEngine(规则引擎)
    Win10自动更新有效强制永久关闭
    Redis 到底是怎么实现“附近的人”这个功能的?
  • 原文地址:https://www.cnblogs.com/open-yang/p/11221383.html
Copyright © 2011-2022 走看看