장고의 redirect 의 기능
Django 에서 reidrect 기능이 어떻게 구현되는지 코드 및 사이트를 참고하여 정리
- redirect 를 한다는 것
def redirect(to, *args, permanent=False, **kwargs):
"""
Return an HttpResponseRedirect to the appropriate URL for the arguments
passed.
# 전달 된 인수에 대해 적절한 URL로 HttpResponseRedirect를 반환합니다..
The arguments could be:
# 인수는 다음과 같다.
* A model: the model's `get_absolute_url()` function will be called.
# 모델의 'get_absolute_url() 함수가 호출
* A view name, possibly with arguments: `urls.reverse()` will be used
to reverse-resolve the name.
# `urls.reverse ()`는 이름을 역으로 해석하는 데 사용됩니다
* A URL, which will be used as-is for the redirect location.
# 리디렉션 위치로있는 그대로 사용되는 URL입니다.
Issues a temporary redirect by default; pass permanent=True to issue a
permanent redirect.
# 기본적으로 임시 리디렉션을 실행합니다. pass permanent = True로 설정하면 영구적 인 리디렉션이 발행됩니다.
"""
redirect_class = HttpResponsePermanentRedirect if permanent else HttpResponseRedirect
return redirect_class(resolve_url(to, *args, **kwargs))
- redirect('posts:post-list') 로 return 한다는 것은 2가지 의미를 가지고 있다.
1) reverse 기능을 사용하여 모든 url 주소를 입력하지 않고 마지막 url 의 값을 가지고 리턴
2) HttpResponseRedirect 클래스가 반환되어 작동
왜 redirect 인가?
- 로그인하지 않고 Django 관리자와 같이 인증이 필요한 URL을 요청하면 Django는 사용자를 로그인 페이지로 리디렉션합니다.
- 성공적으로 로그인하면 장고는 원래 요청한 URL로 사용자를 리디렉션합니다.
- Django 관리자를 사용하여 비밀번호를 변경하면 변경이 성공했음을 나타내는 페이지로 리디렉션됩니다.
- Django 관리자에서 객체를 만들면 Django가 객체 목록으로 리디렉션됩니다.
redirect 기능이 없다면?
로그인 -> '로그인에 성공되었으니 다음 페이지로 이동하시겠습니까?' 의 링크 추가 ( {% url 'posts:post-list' %} ) 와 같은 태그를 템플릿에 추가
redirect 기능의 장점
객체 생성 또는 삭제와 같은 기능이 작동한 후에 사용자가 임의로 다른 작업을 할 수 없도록 하기 위해서도 필요
'장고 > MTV' 카테고리의 다른 글
try, except 와 if else 를 써야할 때 (0) | 2019.03.14 |
---|---|
AbstractBaseUser 모델 (0) | 2019.03.01 |
구문 분석 오류(could not parse ...) (1) | 2019.02.20 |
쿼리의 Q 모델을 활용한 검색 기능 구현 (0) | 2019.02.06 |
장고 폼(bound form, unbound form, cleaned_data, is_valid) (0) | 2019.01.21 |