ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

dango框架学习:四十.CBV 和FBV 模式

2020-06-14 11:01:44  阅读:300  来源: 互联网

标签:FBV views self django CBV context msg import dango


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)

 

标签:FBV,views,self,django,CBV,context,msg,import,dango
来源: https://www.cnblogs.com/liushui0306/p/13124056.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有