zoukankan      html  css  js  c++  java
  • dango框架学习:四十.CBV 和FBV 模式

    FBV和CBV模式

    FBV(function base views) 就是在视图里使用函数处理请求,这一般是学django入门的时候开始使用的方式。

    CBV(class base views) 就是在视图里使用类处理请求,这是面向对象的编程方式。

    from django.conf.urls import url 
    urlpatterns = [ 
         url(r'^fbvdemo/$', views.fbvdemo), 
         url(r'^cbvdemo/$', views.Cbvdemo.as_view()), 
    ]

    FBV(function base views)在views.py文件中定义视图函数来处理用户请求,函数中通过 if 判断 request.method 请求方式是 GET 还是 POST请求做对应的处理。

    FBV 模式如果需要加登录之后才能访问,只需在函数上加装饰器@login_required

    # function base views
    from django.http import HttpResponse, JsonResponse
    from django.contrib.auth.decorators import login_required
    @login_required
    def fbvdemo(request): '''function base views''' context = {"code": 0,"msg": ""} if request.method == "GET": context["msg"] = "这是fbvdemo get请求" return JsonResponse(context) if request.method == "POST": context["msg"] = "这是fbvdemo POST请求" return JsonResponse(context)
    from django.conf.urls import url 
    drom app import views
    urlpatterns = [ 
         url(r'^fbvdemo/$', views.fbvdemo), 
         url(r'^cbvdemo/$', views.Cbvdemo.as_view()), 
    ]

    CBV(class base views) 就是在视图里使用类处理请求.

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

    2.提高了代码的复用性,可以使用面向对象的技术。

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

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

    5.CBV模式子类继承重写父类请求方式的响应函数通过父类dispath方法进行反射分发,在urls.py路由系统中必须使用Myview.as_view()替代视图函数

    from django.http import JsonResponse
    from django.views import View
    
    class Cbvdemo(View):
        context={"msg":"",
                 "code":200}
        def get(self,request):
            self.context["msg"] = 'get请求'
            return Jsonresponse(context)
        def post(self,request):
             self.context['msg'] = 'post请求'
             return Jsonresponse(context)
        def put(self, request):
            self.context['msg'] = 'put请求'
            return Jsonresponse(context)

     method_decorator给CBV视图添加登录校验。

    from django.views import View
    from django.contrib.auth.decorators import login_required
    from django.utils.decorators import method_decorator
    from django.http import JsonResponse
    
    @method_decorator(login_required,name='get')
    @method_decorator(login_required,name='post')
    @method_decorator(login_required,name='put')
    class Cbvdemo(View):
        context={"msg":"",
                 "code":0}
        def get(self,request):
            self.context["msg"] = 'get请求'
            return JsonResponse(self.context)
        def post(self,request):
             self.context['msg'] = 'post请求'
             return JsonResponse(self.context)
        def put(self, request):
            self.context['msg'] = 'put请求'
            return JsonResponse(self.context)
  • 相关阅读:
    Neo4j电影关系图Cypher
    Neo4j电影关系图
    Neo4j配置文件neo4j.conf
    SpringBoot实现多数据源(实战源码)
    Maven添加Oracle驱动及依赖
    HttpClient发送Json数据到指定接口
    java手动分页处理
    设计模式之模板方法模式
    JDBC插入性能优化对比
    Oracle数据库常用监控语句
  • 原文地址:https://www.cnblogs.com/liushui0306/p/13124056.html
Copyright © 2011-2022 走看看