본문 바로가기
기타/django

작정하고 장고 - decorator, superuser, media

by 방배킹 2023. 5. 17.

Decorator를 이용한 코드 간소화

저번 강의에서 구현 했던 인증 시스템을 더 간단하게 구현해보자.

우선 def hello_world(request)에서 user를 확인했었던 if request.user.is_authenticated: 삭제해주고 @login_required를 추가해준다.

@login_required는 로그인이 되었는지 확인해주는 decorator이다.

그리고 자신의 정보만 수정 및 삭제가 가능하도록 해주는 코드를 작성할건데,

decorators.py 파일을 만드로 해당 파일에 아래 코드를 추가해준다.

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

그리고 AccountUpdateView와 AccountDeleteView에 user가 자신의 정보만 update, delete를 할수 있도록,
class AccountUpdateView(UpdateView): 와 class AccountDeleteView(DeleteView):위에

@method_decorator(login_required, 'get')
@method_decorator(login_required, 'post')
@method_decorator(account_ownership_required, 'get')
@method_decorator(account_ownership_required, 'post')

4줄의 코드를 추가해준다.
각각 get, post에 대해 로그인이 되었을때 그리고 자신의 정보만 수정, 삭제가 가능 하도록 해준다.

 

superuser, media 관련 설정

superuser

admin 페이지에 접속하면 다음과 같이 admin계정이 필요하다고 나온다.


python manage.py createsuperuser 명령어를 통해 superuser를 만들고 로그인을 해보자.


다음과 같이 계정을 지울수도있다.


삭제가 잘 되는것을 확인할 수 있다.

media

MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

settings.py에 media 주소 설정을 해준다.

다음 수업들을 위해 필요한 이미지 관련 라이브러리인 pillow를 다운로드 해준다.

pip install pillow

 

댓글