Django fbv 및 cbv 개요

2725 단어 djangofbvcbvDjango
앞에서 학습한 예는 모두 URL을 통해 하나의 함수를 매칭하는데 이런 방식을 function based view(BSV)라고 한다.하나의 전형적인 사용 방식은view를 통해py에서 함수를 정의한 다음에 함수의 Request 매개 변수를 통해method의 유형을 가져옵니다. 예를 들어 페이지를 직접 리셋하면 get 방식이고, 폼을 제출하면post 방식이며, 제출한 방식에 따라 서로 다른 처리를 합니다.
예를 들면 다음과 같습니다.
def user_info(request):
    if request.method == "GET":
        user_list = models.UserInfo.objects.all()
        group_list = models.UserGroup.objects.all()
        return render(request, 'user_info.html', {'user_list': user_list, "group_list": group_list})
    elif request.method == 'POST':
        u = request.POST.get('user')
        p = request.POST.get('pwd')
        models.UserInfo.objects.create(username=u,password=p)
        return redirect('/cmdb/user_info/')

  
또 다른 방식은 CBV(class based view)라고 합니다.이 방식은 보기 클래스를 가져와야 합니다. 사용자 정의 하위 클래스를 통해 이 클래스를 계승할 수 있습니다. 보기 안의 디스패치 () 방법을 이용하여 요청이 get인지post인지 판단할 수 있습니다.dispatch 방법의 본질은 반사기로서 이름에 따라 동명의 방법을 호출할 수 있다.
View 클래스의 일부 코드는 디스패치가 반사로 목록에 있는 방법 이름을 가져옵니다
  http_method_names = ['get', 'post', 'put', 'patch', 'delete', 'head', 'options', 'trace']
  def dispatch(self, request, *args, **kwargs):
        # Try to dispatch to the right method; if a method doesn't exist,
        # defer to the error handler. Also defer to the error handler if the
        # request method isn't on the approved list.
        if request.method.lower() in self.http_method_names:
            handler = getattr(self, request.method.lower(), self.http_method_not_allowed)
        else:
            handler = self.http_method_not_allowed
        return handler(request, *args, **kwargs)

CBV의 예는 다음과 같다.
여기에 하위 클래스에서 디스패치라는 방법을 새롭게 정의하고 슈퍼()를 사용하여 부 클래스의 구조 방법을 호출하는 것이 좋다. 이런 장점은 기능은 변하지 않지만 새로운 기능을 유연하게 추가할 수 있다는 것이다.
from django.views import View
class Home(View):
    def dispatch(self, request, *args, **kwargs):
        #       dispatch
        print('before')
        result = super(Home,self).dispatch(request, *args, **kwargs)
        print('after')
        return result
        
    def get(self,request):
        print(request.method)
        return render(request, 'home.html')
        
    def post(self,request):
        print(request.method,'POST')
        return render(request, 'home.html')

사용자 정의 클래스 안의 방법을 호출하기 위해서 URL 안에서View 클래스의 as 를 호출해야 합니다view () 방법을 입구로 합니다.
예컨대
# urls.py
from django.conf.urls import url
from myapp.views 
import MyView
urlpatterns = [
    
    url(r'^about/', MyView.as_view()),
]

좋은 웹페이지 즐겨찾기