장고에서는 웹 프로그램 개발 시 공통적으로 사용하는 기능들을 개발해서 단축 함수로 제공하고 있다.
함수형 뷰를 사용하지 않고 클래스형 뷰만 사용할 것이더라도, 메소드 오버라이딩시 단축 함수를 사용하는 경우도 있기 때문에 단축 함수들은 이해하고 넘어가야 한다.
이번 포스팅에서는 장고에서 제공하는 단축 함수들을 소개할 것이다.
1. render()
템플릿을 클라이언트에게 보여주기 위해 렌더링을 한 뒤에 HttpResponse 객체를 반환한다.
render(request, template_name, context=None, content_type=None, status=None, using=None)
- request : 클라이언트가 보낸 요청 객체다. 내부적으로 이 객체에 담겨 있는 파라미터들을 사용해 RequestContext 객체를 만들고, 이 데이터들을 컨텍스트 데이터에 추가한다.
- template_name : 템플릿 파일명
- context : 템플릿에 사용할 변수들을 모아놓은 딕셔너리 타입 객체
- content_type : 최종 결과에 반영될 MIME 타입으로, 기본값은 DEFAULT_CONTENT_TYPE 설정 항목값을 따른다.
- status : 응답에 포함될 상태 코드로, 기본값은 200이다.
- using : 템플릿 로딩에 사용되는 템플릿 엔진 이름
2. redirect()
주어진 URL로 이동하기 위한 HttpResponseRedirect 객체를 반환한다.
redirect(to, permanent=False, *args, **kwargs)
- to : 리다이렉션 URL이다. 절대 URL 또는 상대 URL을 직접 입력하는 방법과 URL 패턴 이름을 지정하는 방법 모두 가능하다. URL 패턴 이름을 지정하는 방법을 이용하면 내부적으로 reverse() 함수를 호출한다.
- permanent : True면 영구 리다이렉션(301)을 하고, False면 임시 리다이렉션(302 or 307) 응답을 한다.
- *args : 가변 인자다. 인수가 있는 URL의 경우에 포함하면 된다.
redirect('snack:snack_detail', self.object.id)
# redirect('snack:snack_detail', args=[self.object.id])
- **kwargs : 키워드 가변 인자다. 인수가 있는 URL의 경우에 포함하면 된다.
redirect('snack:snack_detail', pk=self.object.id)
# redirect('snack:snack_detail', kwargs={'pk': self.object.id})
※ *args, **kwargs를 동시에 전달할 수는 없다.
3. get_object_or_404()
- 주어진 검색 대상에서 주어진 조건에 맞는 객체 하나만을 검색해서 결과 객체가 하나라면 해당 객체를 반환하고, 없다면 Http404 에러를 발생시키고, 여러개라면 MultipleObjectsReturned 에러를 발생시킨다. 모델 매니저 클래스의 get()를 사용해 검색한다.
get_object_or_404(klass, *args, **kwargs)
- klass : 검색 대상 Model 클래스, Manager 클래스 또는 QuerySet 객체
- *args : 조건이 들어있는 가변 인자
- **kwargs : 조건이 들어있는 키워드 가변 인자
post = get_object_or_404(Post, pk=1)
4. get_list_or_404()
- 주어진 검색 대상에서 주어진 조건에 맞는 객체들을 검색해서 결과 객체가 있으면 결과 객체 리스트를 반환하고, 없다면 Http404 에러를 발생시킨다. 모델 매니저 클래스의 filter()을 사용해 검색한다.
get_list_or_404(klass, *args, **kwargs)
- klass : 검색 대상 Model 클래스, Manager 클래스 또는 QuerySet 객체
- *args : 조건이 들어있는 가변 인자
- **kwargs : 조건이 들어있는 키워드 가변 인자
posts = get_list_or_404(Post, like__gt=10)
'Django' 카테고리의 다른 글
[Django] request.data와 request.POST는 각각 언제 사용할까? (0) | 2023.03.22 |
---|---|
[Django] Form 처리 방식 정리 (0) | 2023.02.16 |
[Django] 제네릭 뷰의 페이징 기능 (0) | 2023.02.15 |
[Django] QuerySet에서 사용하는 '__'의 의미 (0) | 2023.02.13 |
[Django] 공통 context 변수 설정하기 (0) | 2023.02.11 |
댓글