컴굥일지

[Django Study 09] Authentication 인증시스템 구현과 Decorator 본문

프로그래밍 강의/Django

[Django Study 09] Authentication 인증시스템 구현과 Decorator

gyong 2022. 4. 24. 00:05
반응형

[Authentication 인증시스템 구축 with Decorator]

  • Decorator를 쓰지 않고 인증시스템을 구축하면 중복되는 코드가 많아진다.
  • Decorator는 함수의 내용을 고치지는 않지만, 앞뒤로 붙어서 꾸며준다.(중복 제거 가능)
  • 그냥 함수에는 @login_required라고 쓰면 되지만, 메서드(class안의 함수)에는 적용할 수 없다.
  • @method_decorator :일반 함수에 사용하는 decorator를 메서드에 사용할 수 있도록 변환해준다. @method_decorator(login_required, ‘get’) 이런 식으로 사용한다.

커스텀 decorators.py 만들기

#accountapp/decorators.py
from django.contrib.auth.models import User
from django.http import HttpResponseForbidden

#본인인지 확인하는 작업
def account_ownership_required(func):
    def decorated(request, *args, **kwargs):
        user = User.objects.get(pk=kwargs['pk'])
        if not user == request.user:
            return HttpResponseForbidden()
        return func(request, *args, **kwargs)
    return decorated
  • 이후, views.py에 @method_decorator(account_ownership_required, ‘get’)같이 추가하면 된다.

decorator 모으기

#accountapp/views.py
@method_decorator(login_required, 'get')
@method_decorator(login_required, 'post')
@method_decorator(account_ownership_required, 'get')
@method_decorator(account_ownership_required, 'post')
  • 위와 같이 적으면 코드 중복이 많아진다. 아래처럼 바꿀 수 있다.
#accountapp/views.py
has_ownership = [account_ownership_required, login_required]

@method_decorator(has_ownership, 'get')
@method_decorator(has_ownership, 'post')


[superuser, media 관련 설정]

  • 터미널에 python manage.py createsuperuser 라고 치면 관리자 계정을 만들 수 있다.

  • Image를 다루기 위해서는 추가적인 조치가 필요하다.

  1. settings.py에 아래 코드를 추가한다.

    MEDIA_URL = 'media/' #주소
    
    MEDIA_ROOT = os.path.join(BASE_DIR, 'media') #파일 저장 위치
  2. 장고에서 이미지 저장할 때 필요한 라이브러리를 설치한다. pip install pillow



[출처] 작정하고 장고! Django Pinterest 따라만들기 : 바닥부터 배포까지

섹션 3. Authentication (27강 ~ 29강)

https://www.inflearn.com/course/%EC%9E%A5%EA%B3%A0-%ED%95%80%ED%84%B0%EB%A0%88%EC%8A%A4%ED%8A%B8/dashboard

반응형
Comments