개발을 하다보면 누군가의 요청에 의해서 접속로그, 실패로그를 찍을 일이 생기더라구요.
해당 방법은 user 모델을 상속한 프로젝트에 한하며, 3가지 로그를 찍습니다.
- 접속성공
- 접속실패
- 로그아웃
# 로그기능 추가.
from django.contrib.auth.signals import user_logged_in, user_logged_out, user_login_failed
from django.dispatch import receiver
class Logtbl(models.Model):
action = models.CharField(max_length=64)
ip = models.GenericIPAddressField(null=True)
username = models.CharField(max_length=256, null=True)
timestamp = models.DateTimeField(auto_now_add=True)
def __unicode__(self):
return '{0} - {1} - {2}'.format(self.action, self.username, self.ip)
def __str__(self):
return '{0} - {1} - {2}'.format(self.action, self.username, self.ip)
@receiver(user_logged_in)
def user_logged_in_callback(sender, request, user, **kwargs):
ip = request.META.get('REMOTE_ADDR')
Logtbl.objects.create(action='user_logged_in', ip=ip, username=user.user_email)
@receiver(user_logged_out)
def user_logged_out_callback(sender, request, user, **kwargs):
ip = request.META.get('REMOTE_ADDR')
Logtbl.objects.create(action='user_logged_out', ip=ip, username=user.user_email)
@receiver(user_login_failed)
def user_login_failed_callback(sender, request, credentials, **kwargs):
ip = request.META.get('REMOTE_ADDR')
Logtbl.objects.create(action='user_login_failed',ip=ip, username=credentials.get('username', None))
해당 코드의 경우 각 데코레이터 관련 문서는 해당 문서를 확인해 주시면 되겠습니다
https://docs.djangoproject.com/en/4.0/ref/contrib/auth/
해당 문서에서는 user 모델의 전반적인 설명과, auth에 대한 설명이 나와 있습니다.
admin.py는 다음과 같이 작성해주시면 됩니다.
from django.contrib import admin
from . import models
# Register your models here.
@admin.register(models.User)
class UserAdmin(admin.ModelAdmin):
pass
from django.contrib import admin
from .models import Logtbl
@admin.register(Logtbl)
class LogtblAdmin(admin.ModelAdmin):
list_display = ['action', 'username', 'ip','timestamp',]
list_filter = ['action','username']
출처
https://stackoverflow.com/questions/28807125/django-log-user-ip-for-user-login-failed-signal
'개발 이슈,해결법' 카테고리의 다른 글
[sphinx] 스핑크스를 사용해 django 문서화 (3) | 2022.06.16 |
---|---|
[jupyter notebook] 화면 넓게 설정하는 법 (0) | 2022.06.10 |
[Django] Django 프로젝트 생성 방법 여러가지 (cookie-cutter 포함) (0) | 2022.05.24 |
[GCP] 프리티어? 평생무료? 기존유저는 설정이 안되는건가 (1) | 2022.05.24 |
[POSTMAN] 403 Fobbiden error (0) | 2022.05.18 |