2013-07-26 4 views
0

의 URL 4. 기본값에 따라 장고 사용자 지정 장식을 만들 :내가이 로그인 URL을 가지고

  1. /프로필/로그인/
  2. /마피아/프로필/로그인/

을 그리고 전망을 ,

@login_required 
def favorited_spreads(request ,page_template='spreads/favorited_spreads_ajax.html', 
     template='spreads/favorited_spreads.html',mode=None): 
    profile = request.user.profiles 
    spreads = profile.favorite_by.all() 
    context = { 
      'spreads': spreads, 
      'profile': profile, 
     } 
    if request.is_ajax(): 
     template=page_template 
    return render(request, template,context) 

그리고 내 두 개의 URL은 다음과 같습니다

이제 내 질문에 내가 사용자가 인증되지 않고 /favorites/ here mode=None을 URL로 이동, /profile/login/를 URL로 리디렉션해야하는지하는 @custom_login_required을 말 대신 @login_required의 장식을 원이다.

외부 인증을 사용하여 /mob/favorites/ (여기서는 mode = 'mob')으로 URL을 지정하려는 경우 로그인 URL /mob/profile/login/으로 리디렉션되어야합니다.

도움이 매우 감사합니다. 질문이 명확하지 않은 경우 의견을주십시오.

답변

0

내 자기 settings.MOBILE_LOGIN_URL/mob/profile/login/하고 settings.LOGIN_URL 내가 관련 수정과 기능 django.contrib.auth.decorators.user_passes_test를 사용 여기 /profile/login/

여기에 동일한에 대한 사용자 정의 장식,

def custom_login_required(function,redirect_field_name=REDIRECT_FIELD_NAME): 
    def wrapped_func(request,mode=None, *args,**kwargs): 
     login_url=settings.MOBILE_LOGIN_URL if mode else settings.LOGIN_URL 
     if request.user.is_authenticated(): 
      return function(request, mode=mode,*args, **kwargs) 
     path = request.build_absolute_uri() 
     # If the login url is the same scheme and net location then just 
     # use the path as the "next" url. 
     login_scheme, login_netloc = urlparse.urlparse(login_url or 
                settings.LOGIN_URL)[:2] 
     current_scheme, current_netloc = urlparse.urlparse(path)[:2] 
     if ((not login_scheme or login_scheme == current_scheme) and 
      (not login_netloc or login_netloc == current_netloc)): 
      path = request.get_full_path() 
     from django.contrib.auth.views import redirect_to_login 
     return redirect_to_login(path, login_url, redirect_field_name) 
    return wrapped_func 

를 만들었습니다. 하지만 여전히 우리는 장고 내장형 데코레이터 @login_required을 어떻게 재사용 할 수 있는지 모르고 있습니다.