[python] Django REST framework에서의 로그인 로그 처리 방법

Django REST framework은 웹 애플리케이션의 백엔드에 사용되는 인기있는 프레임워크입니다. 이 프레임워크를 사용하여 사용자 로그인 시도에 대한 로그를 처리하는 방법에 대해 알아보겠습니다.

로그인 로그를 저장하는 모델 만들기

먼저, 로그인 로그를 저장할 모델을 만들어야 합니다. 이 모델은 사용자의 로그인 시간, IP 주소, 성공/실패 여부 등과 같은 정보를 저장할 수 있어야 합니다. 아래와 같이 모델을 만들어 보겠습니다.

from django.db import models
from django.contrib.auth.models import User

class LoginLog(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    login_time = models.DateTimeField(auto_now_add=True)
    ip_address = models.CharField(max_length=50)
    is_success = models.BooleanField()

위의 코드에서는 User 모델과 1:N 관계로 연결된 LoginLog 모델을 정의하였습니다. 로그인 시간은 자동으로 생성되도록 login_time 필드를 auto_now_add로 설정하였고, ip_address 필드는 로그인을 시도한 IP 주소를 저장하기 위해 문자열 필드로 설정하였습니다. is_success 필드는 로그인이 성공했는지를 나타내는 부울 필드입니다.

로그인 시 로그 저장하기

이제 실제 로그인이 발생하는 시점에서 해당 로그를 저장하는 코드를 추가해야 합니다. Django에서는 authenticate 함수를 사용하여 로그인 인증을 처리할 수 있습니다. 아래와 같이 authenticate 함수를 호출한 뒤, 로그를 저장하는 코드를 추가해 보겠습니다.

from django.contrib.auth import authenticate, login
from .models import LoginLog

def login_view(request):
    username = request.POST['username']
    password = request.POST['password']
    
    user = authenticate(request, username=username, password=password)
    
    if user is not None:
        login(request, user)
        is_success = True
    else:
        is_success = False
    
    # 로그인 로그 저장
    LoginLog.objects.create(user=user, ip_address=request.META['REMOTE_ADDR'], is_success=is_success)
    
    # 로그인 성공/실패에 따른 처리
    if is_success:
        # 로그인 성공 시 처리할 내용
        pass
    else:
        # 로그인 실패 시 처리할 내용
        pass

위의 코드에서는 authenticate 함수를 사용하여 유효한 사용자인지를 확인하고, 로그인이 성공했는지 여부를 is_success 변수에 저장합니다. 그리고 해당 로그를 LoginLog 모델에 저장합니다. 로그인이 성공하면 login 함수를 사용하여 실제로 로그인 처리를 실행하고, 필요한 추가 작업을 수행할 수 있습니다.

로그인 로그 조회하기

로그인 로그를 확인하기 위해 조회 기능을 추가할 수도 있습니다. 예를 들어, 관리자 페이지에서 최신 로그인 로그를 확인하는 기능을 구현해볼 수 있습니다. 아래는 간단한 조회 예제입니다.

from .models import LoginLog

def login_log_view(request):
    login_logs = LoginLog.objects.all().order_by('-login_time')[:10]
    # 로그인 로그를 최신순으로 가져와서 처리하는 코드
    pass

위의 코드에서는 LoginLog 모델에서 최신 로그인 로그를 가져오기 위해 all() 메서드를 호출하고, login_time 필드를 기준으로 내림차순으로 정렬하여 최신 로그들을 가져오도록 설정했습니다. 이후에는 해당 로그들을 원하는 방식으로 처리할 수 있습니다.

이렇게 Django REST framework에서 로그인 로그를 처리하는 방법을 알아보았습니다. 이러한 로그 처리는 사용자 활동 추적이나 보안 이슈 해결에 도움을 줄 수 있습니다. 더 많은 로그 처리 기능을 추가하고 싶다면 Django의 로깅 시스템을 활용하거나, 로그 분석 도구를 사용해 볼 수도 있습니다.

참고 자료