Django에서 클래스 보기의 몇 가지 실현 방식

20786 단어 Django
클래스 보기
4
  • 함수로 정의된 보기를 함수시도라고 하는데 함수시도는 이해하기 쉽다.그러나 하나의 보기에 대응하는 경로가 다양한 HTTP 요청 방식을 지원할 때 하나의 함수에서 서로 다른 업무 논리를 작성해야 하기 때문에 코드의 가독성과 복용성이 좋지 않다

  • 4
  • Django에서도 클래스를 사용하여 하나의 보기를 정의할 수 있는데 이를 클래스 보기라고 부른다.클래스 보기를 사용하면 보기에 대응하는 다양한 요청 방식을 클래스 중의 다른 방법으로 구별하여 정의할 수 있습니다

  • 방식 1
    def my_decorator(func):
        """       """
        def wrapper(request,*args,**kwargs):
            print("          ")
            print("     : %s" % request.path)
            return func(request, *args, **kwargs)
        return wrapper
    
    
    class DemoView(View):
        """     """
    
        #    dsipasth              ,dsipasth as_view         
    
        @method_decorator(my_decorator)
        def dispatch(self, *args, **kwargs):
            return super().dispatch(*args, **kwargs)
    
        def get(self,request):
            print("get   ")
            return  HttpResponse("get page")
    
        def post(self,request):
            print("post   ")
            return  HttpResponse("post page")
    

    에서파일에서 4urls클래스를 보기로 바꾸기
    url("demo1",DemoView.as_view()),
    

    방식 2
    def my_decorator(func):
        """       """
        def wrapper(request,*args,**kwargs):
            print("          ")
            print("     : %s" % request.path)
            return func(request, *args, **kwargs)
        return wrapper
        
        
    """
    method_decorator        name          
    method_decorator     ,            name        
    """
    
    # @method_decorator(my_decorator, name='get') #             
    @method_decorator(my_decorator,name="dispatch") #             
    class DemoVeiw2(View):
        """     """
    
        def get(self,request):
            print("get   ")
            return  HttpResponse("get page")
    
        def post(self,request):
            print("post   ")
            return  HttpResponse("post page")
    

    에서파일에서 4as_view()클래스를 보기로 바꾸기
      url("demo2",DemoVeiw2.as_view()),
    

    사각형 3
    def my_decorator(func):
        """       """
        def wrapper(request,*args,**kwargs):
            print("          ")
            print("     : %s" % request.path)
            return func(request, *args, **kwargs)
        return wrapper
    
    
    def my_decorator3(func):
        def wrapper(self, request, *args, **kwargs):  #      self
            print('          ')
            print('    %s' % request.path)
            return func(self, request, *args, **kwargs)  #      self
        return wrapper
    
    """
              ,     ,         request  
                 ,          request  ,  self       ,         request  
    method_decorator                 self  ,        。
                        ,    ,      method_decorator。
    """
    
    
    class DemoVeiw3(View):
        """     """
    
        @my_decorator3  #   dispatch       
        def dispatch(self, *args, **kwargs):
            return super().dispatch(*args, **kwargs)
    
        def get(self,request):
            print("get   ")
            return  HttpResponse("get page")
    
        def post(self,request):
            print("post   ")
            return  HttpResponse("post page")
    

    에서파일에서 4urls클래스를 보기로 바꾸기
    url("demo3",DemoView.as_view()),
    

    Mody4(Minxin Extension Class)
    """
    Minxin   
    """
    
    def my_decorator4(func):
    	"""      """
        def wrapper(request, *args, **kwargs):  #      self
            print('          ')
            print('    %s' % request.path)
            return func(request, *args, **kwargs)  #      self
        return wrapper
    
    #          ,       Minxin  
    class MyDecoratorMinxin(object):
        """  Minxin   """
        @classmethod
        def as_view(cls, *args, **kwargs):
            view = super().as_view(*args, **kwargs)
            view = my_decorator4(view)
            return view
    
    """
                   ,           ,
             object,  object    as_view  ,
                               View     
    """
    
    class DemoVeiw4(MyDecoratorMinxin,View):  #    ,    View     
        """     """
    
        def get(self,request):
            print("get   ")
            return  HttpResponse("get page")
    
        def post(self,request):
            print("post   ")
            return  HttpResponse("post page")
    
    
    

    에서파일에서 4as_view()클래스를 보기로 바꾸기
    url("demo4",DemoView.as_view()),
    

    좋은 웹페이지 즐겨찾기