dangoフレームワーク学習:40.CBVとFBVモード

3558 ワード

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.多くのif判定ではなく、異なる関数に対して異なるHTTPメソッドに対して処理することができ、コードの可読性を向上させることができる.
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)