Django 사용자 로그인및 권한 부여

2023. 12. 9. 13:49개발 문서/Django

728x90
반응형

소개:
장고(Django)는 파이썬 기반의 웹 프레임워크로, 강력한 인증과 권한 관리 기능을 제공합니다. 이 블로그 포스트에서는 장고를 사용하여 사용자 로그인과 권한 부여를 어떻게 구현하는지에 대해 자세히 알아보겠습니다.


1. 사용자 모델 정의:
장고의 기본 사용자 모델은 username, email, password 등을 포함합니다. 그러나 프로젝트의 요구에 따라 커스텀 사용자 모델을 정의할 수 있습니다. models.py 파일에서 다음과 같이 커스텀 사용자 모델을 정의할 수 있습니다.

from django.contrib.auth.models import AbstractUser

class CustomUser(AbstractUser):
    # 추가 필드 및 메서드 정의
    pass

2. 사용자 인증 및 로그인:
장고에서 제공하는 django.contrib.auth 앱을 사용하여 간단하게 사용자 인증과 로그인을 구현할 수 있습니다. views.py 파일에서 다음과 같이 로그인 뷰를 정의할 수 있습니다.

from django.contrib.auth import authenticate, login
from django.shortcuts import render, redirect

def user_login(request):
    if request.method == 'POST':
        username = request.POST['username']
        password = request.POST['password']
        user = authenticate(request, username=username, password=password)

        if user is not None:
            login(request, user)
            return redirect('home')
        else:
            # 로그인 실패 처리
            return render(request, 'login.html', {'error': 'Invalid login credentials'})

    return render(request, 'login.html')

3. 권한 관리:
장고는 사용자에게 부여된 권한을 관리하는데 유용한 데코레이터 및 클래스를 제공합니다. 데코레이터를 사용하여 특정 뷰에 접근 권한을 부여할 수 있습니다.

from django.contrib.auth.decorators import login_required, permission_required

@login_required
def some_protected_view(request):
    # 로그인한 사용자만 접근 가능
    return render(request, 'protected.html')

@permission_required('app.can_view_content')
def content_view(request):
    # 'can_view_content' 권한이 있는 사용자만 접근 가능
    return render(request, 'content.html')

4. 그룹과 권한 할당:
장고에서는 그룹을 통해 사용자에게 일괄적으로 권한을 할당할 수 있습니다. 관리자 페이지에서 그룹을 생성하고 사용자를 해당 그룹에 추가하여 권한을 부여할 수 있습니다.


5. 커스텀 권한 정의:
프로젝트에 특화된 권한이 필요한 경우, 커스텀 권한을 정의하여 사용할 수 있습니다. models.py에서 다음과 같이 커스텀 권한을 정의할 수 있습니다.

from django.contrib.auth.models import Permission
from django.contrib.contenttypes.models import ContentType

content_type = ContentType.objects.get_for_model(MyModel)
permission = Permission.objects.create(
    codename='can_do_something',
    name='Can Do Something',
    content_type=content_type,
)

이후, 이 권한을 그룹에 할당하거나 사용자에게 직접 부여할 수 있습니다.


결론:
장고의 강력한 인증 및 권한 관리 기능을 통해 웹 애플리케이션을 보안성 있게 개발할 수 있습니다. 커스텀 사용자 모델, 로그인 및 권한 관리, 그룹 할당, 커스텀 권한 정의 등을 활용하여 프로젝트의 요구에 맞게 구현할 수 있습니다. 장고는 보안성과 편의성을 동시에 제공하여 웹 개발자들에게 효율적인 작업환경을 제공합니다.