2013-05-28

Django : login_required 데코레이터


Django 의 내장 authentication 모듈을 사용하지 않는 경우, 직접 제작을 해야 하는데, login_required 라는 데코레이터가 없어서, 매번 View 에서 접근 로직을 작성해주어야 해서 번거로웠다. 아래와 같이 별도의 데코레이터를 작성해두면 로직이 바뀌더라도 하나만 변경하면 되니까 코드 관리가 좀 더 편할 것이다.

def login_required(function=None):
    def _dec(view_func):
        def _view(request, *args, **kwargs):
 
            # 아래 로직을 적당히 자신의 사이트에 맞게 고쳐서 쓰면 될 것이다.
            if "login_yn" not in request.session:
                return HttpResponseRedirect('/')
            else:
                return view_func(request, *args, **kwargs)
 
        _view.__name__ = view_func.__name__
        _view.__dict__ = view_func.__dict__
        _view.__doc__ = view_func.__doc__
        return _view
 
    if function is None:
        return _dec
    else:
        return _dec(function)