서비스를 개발하다보면 고객을 유인하는데, 가입 후에 특정 주소로 리다이렉트하길 원할 수 있다.
특히나 이 주소가 동적인경우를 위해 이미 http url에서는 next라는 querystring으로 request 처리 후 이동해야할 url을 알려준다.
실제 예시를 들자면, 로그인 후에 6번 매물로 이동하게 하고 싶다면.
https://onepaper.biz/accounts/login/?next=/listings/6/ 으로 다음 url을 정의해줄 수 있다.
이 경우 로그인이 정상적으로 처리되고나서, https://onepaper.biz/listings/6/
[원페이퍼 - 온라인 부동산 계약
비대면 부동산 온라인 계약 서비스. 분실걱정 NO, 계약서 공유 OK. 당신의 계약서를 이제는 온라인으로 관리해보세요.
onepaper.biz](https://onepaper.biz/listings/6/으로)
으로 자동으로 이동한다.
자 그럼, 여기서 next의 필요성과 작동방식은 알았는데, 이걸 특정 페이지의 특정 버튼에 query string으로 넣고 싶을 수도 있다. 실제로 onepaper intro페이지에는 로그인 페이지로 이동하기 위한 버튼이 있는데, 해당 버튼에는 href="/accounts/login"
으로 하드 코딩 되어있었다.
이 경우 next query string을 넘겨줘도 로그인 버튼에는 query string이 들어가지 않아서 로그인 페이지로 이동시 next에 대한 query string이 사라져버렸다.
따라서 request.GET에 대한 query string을 버튼 href에 넣어줄 필요가 있는데, 그 경우 아주 간단하게 해결이 가능했다.
<a href="/accounts/login/?{{ request.GET.urlencode }}">
urlencode를 하지 않으면 query dict 그대로 들어가서 제대로 주소창에 입력되지 않는다. 또한 request.GET이 비어있는 경우는 ?는 빼도 되기 때문에 원한다면 if else 구문으로 분기처리해주면 더 깔끔하게 처리 할 수 있다.
https://docs.djangoproject.com/en/3.2/ref/request-response/#django.http.QueryDict.urlencode
- urlencode 참고 문서.
'IT > Django' 카테고리의 다른 글
Setup django-allauth social login (0) | 2022.09.08 |
---|---|
Django-ninja-extra 튜토리얼(정리중) (1) | 2022.06.30 |
Django query 최적화(select_related, prefetch_related, Prefetch + @ django_auto_prefetching) (0) | 2022.05.25 |
Frontend와 Backend간 editable table row 업데이트 / 삭제 로직 (0) | 2022.04.25 |
Django migration 파일에서 외부파일 오류 (0) | 2022.04.15 |