장고 Summary - 7. Decorators-thumbnail

장고 Summary - 7. Decorators

자주 쓰이는 것들 위주로
300

decorators

Decorators도 야심차게 정리하려고 했는데, 자주 쓰이는 것은 많지 않고, 차라리 custom decorator를 쓰는 경우들이 더 많은 것 같았다.
여기서는 자주 쓰이는 몇 가지 decorator들만 살펴보고 마치자.

decorator란?

그 전에 잠시 decorator에 대해 잠깐만 언급하고 넘어가자.
쉬운 예시로 시작해보자.

def example_deco(func):
    def decorator():
        print('decorator begins.')

        func()

        print('decorator ends.')
    
    return decorator

@example_deco
def another_func():
    print('another function does somegthing!')

another_func()
# decorator begins.
# another function does somegthing!
# decorator ends.

함수를 보기만 하더라도 이해가 될 것이다. 좀 어렵게 이야기하자면, Callable object를 받아서 callable object를 리턴하는 것이 decorator다.
이젠 진짜로 장고에서 자주 볼 수 있는 '몇' 가지 decorator들을 살펴보자.

@login_required

from django.contrib.auth.decorators import login_required로 가져온다.
로그인이 되었을 때에만 함수를 실행할 수 있게 해준다.

@permission_required()

from django.contrib.auth.decorators import permission_required로 가져온다.
@permission_required('is_staff')와 같은 형태로 쓰이며, 특정 권한이 있을 때에만 함수가 실행되도록 한다.

@require_POST

from django.views.decorators.http import require_POST로 가져온다.
POST 방식의 접근만을 허용한다.

@require_http_methods()

from django.views.decorators.http import require_http_methods로 가져온다.
@require_http_methods(["GET", "POST"])라고 하면 GET과 POST 방식의 접근만을 허용하는 것이다.

참고 사이트 :
Django document: View decorators