바뀜

둘러보기로 가기 검색하러 가기
1,318 바이트 추가됨 ,  2023년 8월 7일 (월) 11:53
5번째 줄: 5번째 줄:     
# 뷰 : 최악의 선택. 모든 뷰에서 기존화면을 저장하게 할 수는 없다.
 
# 뷰 : 최악의 선택. 모든 뷰에서 기존화면을 저장하게 할 수는 없다.
# 데코레이터 상속 : login_requeire 데코레이터를 변형해서 진행해보려 했는데... 나는 모달로 바로 소셜로그인페이지로 넘어가게끔 만들어둬서 데코레이터를 거치지 않는 경우가 발생했다.(단순 로그인 버튼을 쓴다면 좋은 전략일듯. 버튼으로 작동하는 뷰 하나만 고쳐 데코레이터를 달면 되니까. + 일반 데코레이터가 달린 뷰에서도 자연스레 작동할 테니까.)
+
# 데코레이터 상속 : login_requeired 데코레이터를 변형해서 진행해보려 했는데... 나는 모달로 바로 소셜로그인페이지로 넘어가게끔 만들어둬서 데코레이터를 거치지 않는 경우가 발생했다.(단순 로그인 버튼을 쓴다면 좋은 전략일듯. 버튼으로 작동하는 뷰 하나만 고쳐 데코레이터를 달면 되니까. + 일반 데코레이터가 달린 뷰에서도 자연스레 작동할 테니까.) 다만, 외부링크로 로그인이 필요한 페이지를 보낼 때 사용하면 좋은 전략일 듯하다.
 
# 미들웨어 : 단일 로그인이라면 괜찮지만... 소셜로그인이라든가 외부 기능을 사용하게 되면 이전 페이지를 저장할 때 외부 페이지가 저장되어버린다.
 
# 미들웨어 : 단일 로그인이라면 괜찮지만... 소셜로그인이라든가 외부 기능을 사용하게 되면 이전 페이지를 저장할 때 외부 페이지가 저장되어버린다.
 
# 탬플릿 필터 이용 : 그나마 이게 범용적으로 사용 가능할듯.
 
# 탬플릿 필터 이용 : 그나마 이게 범용적으로 사용 가능할듯.
   −
=== 과정 ===
+
== 데코레이터 조작 ==
 +
{| class="wikitable"
 +
!과정
 +
!설명
 +
!비고
 +
|-
 +
|데코레이터 .py 작성.
 +
|적절히 관리할 곳에 작성.
 +
|<syntaxhighlight lang="python">
 +
from django.shortcuts import redirect
 +
from functools import wraps
 +
 
 +
def custom_login_required():
 +
    '''로그인 데코레이터의 기능에 현재 페이지를 저장하기 위해.'''
 +
    def _decorator(view_func):
 +
        @wraps(view_func)
 +
        def _wrapped_view(request, *args, **kwargs):
 +
            # 로그인 하지 않았을 때에만.
 +
            if not request.user.is_authenticated:
 +
                request.session['before_login'] = request.path
 +
                return redirect('custom_account:login_social')  # 로그인 페이지로 이동.
 +
            return view_func(request, *args, **kwargs)
 +
 
 +
        return _wrapped_view
 +
 
 +
    return _decorator
 +
</syntaxhighlight>
 +
|-
 +
|데코레이터 사용
 +
|기존에 사용하던 login_required를 일일이 바꿔주긴 쉽지 않아 다음과 같이 처리한다.
 +
|from custom_account.decorator import custom_login_required as login_required
 +
|-
 +
|뷰에서 리다이렉트
 +
|다른 것과 동일.
 +
|세션에서 befroe_login 을 불러와 리다이렉트.
 +
|}
 +
 
 +
== 탬플릿 필터 이용 ==
 
{| class="wikitable"
 
{| class="wikitable"
 
|+
 
|+

둘러보기 메뉴