인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

sunnnwo님의 프로필 이미지
sunnnwo

작성한 질문수

실리콘밸리 엔지니어가 가르치는 파이썬 장고 웹프로그래밍

CBV, FormView(폼 뷰)에 대해 알아보기

reverse vs reverse_lazy 사용 이유와 차이점을 이해하지 못 했습니다.

해결된 질문

작성

·

60

0

reverse 와 reverse_lazy가 호출 즉시 평가한다. 지연평가한다. 여기서 평가가 의미하는게 뭔지 잘 모르겠습니다. 그리고 form_valid는 어디서 호출이 되는건가요. 전반적으로 이해가 잘 안되어 질문에 두서가 없습니다. 죄송합니다.

답변 1

0

미쿡엔지니어님의 프로필 이미지
미쿡엔지니어
지식공유자

안녕하세요 sunnnwo님,

"평가"는 코드가 실제로 실행되어 값을 계산하는 것을 의미합니다. reversereverse_lazy는 Django에서 URL을 문자열로 반환하는 함수입니다. 이 둘의 차이는 언제 평가되는지에 있습니다:

  • reverse: 호출 즉시 평가됩니다. 즉, reverse를 호출하는 순간 URL이 즉시 계산되어 반환됩니다.

  • reverse_lazy: 지연 평가됩니다. 즉, reverse_lazy는 필요할 때까지 URL 계산을 미룹니다. 일반적으로 클래스 기반 뷰에서 URL을 사용하기 전에 뷰가 로드되기 때문에, 필요할 때까지 미루는 reverse_lazy가 적합합니다.

따라서, reverse_lazy는 URL을 즉시 계산하지 않고, 해당 URL이 실제로 필요할 때까지 평가를 미루는 방식으로 동작합니다.

 

form_valid 메서드

form_valid 메서드는 Django의 클래스 기반 뷰에서 폼 데이터가 유효하다고 판단되었을 때 자동으로 호출됩니다. 예를 들어, CreateViewUpdateView 같은 뷰에서 폼 검증이 성공하면, Django가 form_valid 메서드를 호출합니다.

보통 form_valid 메서드는 데이터를 저장하고 사용자가 폼 제출 후 이동할 URL을 반환하는 역할을 합니다. 예를 들어, 아래와 같은 코드에서:

class MyCreateView(CreateView):
    model = MyModel
    form_class = MyForm
    success_url = reverse_lazy('success-url')

    def form_valid(self, form):
        # form의 데이터 저장 등 필요한 작업을 수행
        return super().form_valid(form)

form_valid가 호출되면 폼 데이터가 저장되고, success_url로 리다이렉트됩니다. form_validCreateViewUpdateView 등의 폼을 사용하는 클래스 기반 뷰에서 자동으로 호출되기 때문에, 사용자가 따로 호출할 필요는 없습니다.

sunnnwo님의 프로필 이미지
sunnnwo

작성한 질문수

질문하기