Django의 함수 기반 뷰 및 클래스 기반 뷰

소개



내가 장고를 막 배우기 시작했을 때내가 선택할 수 있는 문제가 하나 있다.
함수에 기반한 보기인지 클래스에 기반한 보기인지 어떤 보기를 사용해야 합니까?
나는 이것이 Django가 초보자들에게 파악하기 어려운 핵심 원인 중의 하나라고 믿는다.
따라서 저는 본고가 당신에게 이러한 보기의 기본 기능을 이해하게 할 수 있다고 믿습니다.
당신의 개발에서 선택을 하려면 당신의 용례를 바탕으로 해야 합니다.

기능 기반 뷰(FBV)



기능 기반 뷰(FBV)란 무엇입니까?


함수 기반 뷰는 Python에서 함수를 생성하는 것과 유사합니다.
직접 호출 함수와 다르다.
이 요청은 request 에서 views.py 라고 불리는 HTTP 요청을 수신합니다.
URL에 지정된 URL에 따라 HTMLresponse을 반환합니다.py 호출 함수.
이제 막 장고를 배우기 시작하면
함수 기반 보기는 Django Girls 또는 Mozilla Developer Network 또는 Django 강좌에서 소개한 첫 번째 보기입니다.

얘 어때요?


가장 기본적인 형식에서 함수 기반의 보기는 이렇게 보이고 응답을 되돌려줍니다.fbv_1 함수에서 return 는 HTML 응답을 반환하는 데 사용됩니다.
그러나 forfbv_2render라는 이름의 미리 만들어진 템플릿 설계를 사용하여 HTML 응답을 생성합니다.
from django.http import HttpResponse, HttpResponseNotFound, Http404
from django.shortcuts import render
from polls.models import Poll


def fbv_1(requests):
   if requests:
     return HttpResponse('<h1>Page was found</h1>')
   else:
     return HttpResponseNotFound('<h1>Page not found</h1>')


def fbv_2(request, poll_id):
   try:
     p = Poll.objects.get(pk=poll_id)
   except Poll.DoesNotExist:
     raise Http404("Poll does not exist")
   return render(request, 'polls/detail.html', {'poll': p})

장점과 단점


다음은 함수 기반의 보기를 사용한 나의 연구와 경험을 바탕으로 한다.

찬성 의견

  • 가르치기 쉽다
  • 구현 용이성
  • 코드 기반
  • 의 직접적인 성질로 인해 읽기 쉽다

    속이다

  • 요청 조건에 따라 확장 또는 사용자 정의할 수 없음
  • 코드를 다시 사용하기 어려워서 다른 보기에서 코드가 중복됩니다.
  • 클래스 기반 뷰(CBV)



    클래스 기반의 보기를 도입하여 보기의 불활성, 코드 중용성과 맞춤형 문제를 해결했다.

    클래스 기반 뷰(CBV)란 무엇입니까?


    이러한 이유로 클래스 기반 뷰(CBV)가 생성됩니다.
    그것의 실현은 요청 조건에서 만들어진 흔한 모델을 해결하기 위한 것이다.
    너는 CBV를 대본에 비유할 수 있다.
    요청 조건에 따라 다르거나 복잡한 보기를 만들 수 있습니다.
    이 극본은 Classly Class-Based Views에 세워질 수 있다.
    Django에서 CBV를 위해 무엇을 실현했는지 더 잘 알 수 있습니다.

    얘 어때요?


    CBV의 가장 기본적인 형식은 detail.html에서 기본값View을 가져와 CBV를 만드는 것이다.
    HTTP request methods 예: django.views, GET 또는 POST 에 따라 올바른 응답을 반환합니다.
    from django.views import View
    
    
    class CBV(View):
       def get(self, request):
         # Code block for GET request
         pass
    
       def post(self, request):
         # Code block for POST request
         pass
    
    
    CBV의 고급 또는 복잡한 버전을 만들기 위해 내장형Generic Views으로 일반적인 동작을 해결합니다
    다른 하나는 특정 기능을 제공하는 것Mixins이다.
    CBV에 대해 자세히 알아보려면 Django documentationClassly Class-Based Views & Class-Based Views in Django를 방문하여 자세한 내용을 확인하십시오.

    장점과 단점


    다음은 내가 유형에 기초한 관점을 사용하는 데 대한 연구와 경험을 바탕으로 한다.

    찬성 의견

  • 확장 클래스를 통해 사용자 정의 간소화
  • Object Orientated Design원칙
  • 에 기초한 코드 중용성
  • 내장형DELETEplaybook 스타일로 CBV 제작이 용이함
  • 속이다

  • 고급스럽거나 복잡한 CBV가 필요하다면 정확한 내장 유니버설 보기와 혼합에 대한 추가 연구와 테스트가 필요하다.
  • 더 읽기 어려워
  • 추상적이고 코드 흐름이 뚜렷하지 않고 직접적이어서 개발자들이 곤혹스러워한다.
  • FBV와 CBV 사이에는 어떤 차이가 있습니까?



    보기가 간단하고 유지보수가 용이하며 대량의 맞춤형 직접 솔루션이 필요하면 FBV를 선택하십시오.
    보기가 복잡하고 사용자 정의 및 재사용이 필요한 경우 CBV를 선택합니다.
    경우에 따라 CBV를 선택해야 합니다.
    특히 폼을 만들 계획이라면 검증하십시오.
    또한 끝점 생성을 위해 Django REST Framework 을 사용하고 있을 수도 있습니다.

    결론



    나는 정말 이 글이 네가 FBV와 CBV를 더욱 잘 이해하는 데 도움을 줄 수 있기를 바란다.
    따라서 Django에서 FBV와 CBV의 학습 곡선을 빠르게 실현할 수 있습니다.
    그 외에, 나는 그것이 당신의 용례를 위해 정확한 보기를 선택할 수 있도록 충분한 견해를 제공하기를 바랍니다.
    마지막으로 CBV나 FBV에 대한 선호도는 여러 가지가 있다.
    나에게 있어서, 그것은 너에 대한 의미 있는 용례에서 그것을 사용하는 경향이 더 있다.
    나는 네가 어떤 일을 빨리 완성해야 한다면 CBV의 연구와 실현이 너에게 유익할 것이라고 믿는다.
    이 글을 좋아하신다면 제 Adventurer's Newsletter 를 등록하여 Python, 창업, 웹 개발 분야의 매주 업데이트를 받으세요.
    너도 나와 함께 나의 Dev에 관한 문장의 최신 업데이트를 얻을 수 있다
    원본 게시물Function-Based Views vs Class Based-Views in Django - Reading Time: 5 Mins에 표지 이미지는 Photo by Dietmar Becker on Unsplash에서 제공합니다

    참고

  • Undraw
  • Django Girls

  • Mozilla Developer Network
  • Django
  • Classly Class-Based Views
  • HTTP Request Methods
  • Built-in Generic Views

  • Class-Based Views
  • Class-Based Views in Django

  • Object Orientated Design
  • Django REST Framework
  • Marcus: Django Class-Based Views vs Function-Based Views
  • Concisecoder: Django Function-Based Views vs Class-Based Views
  • Simple is Better Than Complex: Class-Based Views vs Function Based Views
  • 좋은 웹페이지 즐겨찾기