2012-01-09 1 views
0

데이터의 특정 부분이 내 세션에 있는지 확인하는 장고 뷰의 데코레이터를 만들려고합니다. 그곳에 있으면보기를 볼 수 있고,보기가 없다면 다른보기로 리디렉션되어 세션에 삽입됩니다. 세션 데이터의 존재를 알리기 위해 데코레이터를 만드는 데 도움이 필요합니다.

  • 사람은 예를 제공 할 수 있습니다 ...
    1. 이 올바른 접근 방식을 데코레이터를 사용하고, 아니면 미들웨어를 활용해야합니다

      궁금?

    감사

  • 답변

    0

    데코레이터는 확실히 내가 생각하는 가장 의미가 있습니다. @login_required 데코레이터 코드를 확인하십시오.

    def user_passes_test(test_func, login_url=None, redirect_field_name=REDIRECT_FIELD_NAME): 
        """ 
        Decorator for views that checks that the user passes the given test, 
        redirecting to the log-in page if necessary. The test should be a callable 
        that takes the user object and returns True if the user passes. 
        """ 
    
        def decorator(view_func): 
         @wraps(view_func, assigned=available_attrs(view_func)) 
         def _wrapped_view(request, *args, **kwargs): 
          if test_func(request.user): 
           return view_func(request, *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_view 
        return decorator 
    
    
    def login_required(function=None, redirect_field_name=REDIRECT_FIELD_NAME, login_url=None): 
        """ 
        Decorator for views that checks that the user is logged in, redirecting 
        to the log-in page if necessary. 
        """ 
        actual_decorator = user_passes_test(
         lambda u: u.is_authenticated(), 
         login_url=login_url, 
         redirect_field_name=redirect_field_name 
        ) 
        if function: 
         return actual_decorator(function) 
        return actual_decorator 
    
    관련 문제