될때까지

Django render, redirect 차이점이 뭐야? 본문

학습/살이되고 뼈가되어라

Django render, redirect 차이점이 뭐야?

랖니 2022. 4. 27. 20:55
728x90

[오지랖 파이썬 웹 프로그래밍] 유튜브를 보면서 온라인쇼핑몰을 장고로 만들고 있다. 장고의 MTV 패턴 중, V는 view를 의미하고, 장고에서 기능을 담당한다. 웹 요청으로부터 전달받은 데이터를 처리하는 로직을 작성하는 부분이 바로 이 view다. view에는 함수형과 클래스형의 2가지 view가 있다.

함수형 뷰
(Function-based view, FBC)
  : request를 매개변수로 받음
  : 사용자가 직접 모든 기능을 생성
클래스형 뷰
(Class-bassed view, CBV)
  : 장고에서 미리 마들어둔 클래스 뷰(제너릭뷰)를 상속받아서 생성
  : url에서 주소를 열어줄 때, as_view()를 붙여 클래스뷰를 함수형 뷰로 바꿔줘야함

 

이런 뷰들을 작성하는 views.py에서 함수형 뷰를 생성하여 쇼핑몰의 장바구니에서 필요한 여러가지 기능들을 만들고 있었다. 어쩔때는 redirect를 쓰고, 어쩔 때는 또 render를 써서 뷰를 return했다. 둘의 차이점이 무엇일까? 둘다 return 시 사용하고, r로 시작하는 게 영 헷갈린다. 도대체 뭐가 다른걸까?

render context dictionary를 template과 결합하여 HttpResponse 객체를 반환하는 메소드
render(request, template_name, context=None, content_type=None, status=None, using=None)
- request와 template_name은 필수
- template_name에는 불러오고 싶은 템플릿(html파일)을 작성
내가 가진 templates에 data를 넣어서 보내고 싶을 때.
redirect redirect(to, *args, permanent=False, **kwargs)
- to에는 이동할 URL 적기
- 상대URL(현재 실행되는 파일의 위치를 기준으로한 디렉토리의 경로)
절대URL(애플url, 삼성url처럼 도메인을 포함한 전체 위치정보) 모두 가능
현재 있는 페이지에서 지정한 url로 이동. 
즉, 이동한 url과 연결되어 있는 views가 실행되고, 그에 따른 return값이 따로 존재한다.
로그인과 같은 경우 redirect로 메인페이지를 보낸다. 만약 render로 작성했다면 새로고침 시 다시 로그인을 해야하고 redirect의 경우에는 url을 타고 view로 넘어오기 때문에 재로그인이 필요없다.

 

크게 일단 작성하는 방법이 다르다. 그래서 render는 request를 적어주고, 불러올 템플릿 이름, 원하는 인자(context)를 적어줬었고 redirect는 이동할 url만 적어줬었던 것이다. 템플릿을 불러오느냐, 아니면 지정 url로 이동시켜서 새 view를 실행시키냐에 따라 사용법이 다르다. 아직 정확하게 render와 redirect를 쓰는 경우를 잘 모르겠어서 포스팅은 여기서 마무리한다. 찝찝한 끝을, 추가 스터디 후에 하도록 하겠다!

728x90