티스토리 뷰
728x90
반응형
장고의 accounts/login을 이용하여 로그인/로그아웃을 구현해놓은 상태,
이렇게 구현하면 views.py에 로그인/로그아웃 관련 페이지 없이 기능이 구현됩니다
따라서 로그인폼에 action받는 경로가 없죠
그럼 어떻게 로그인/로그아웃 로그를 저장할까요?
아래는 스택오버플로우에서 가져온,
로그인, 로그아웃 시 누가 로그인을 했는지 ip, user정보를 가져올 수 있는 코드입니다
import logging
from django.contrib.auth.signals import user_logged_in, user_logged_out, user_login_failed
from django.dispatch import receiver
log = logging.getLogger(__name__)
@receiver(user_logged_in)
def user_logged_in_callback(sender, request, user, **kwargs):
# to cover more complex cases:
# http://stackoverflow.com/questions/4581789/how-do-i-get-user-ip-address-in-django
ip = request.META.get('REMOTE_ADDR')
log.debug('login user: {user} via ip: {ip}'.format(
user=user,
ip=ip
))
@receiver(user_logged_out)
def user_logged_out_callback(sender, request, user, **kwargs):
ip = request.META.get('REMOTE_ADDR')
log.debug('logout user: {user} via ip: {ip}'.format(
user=user,
ip=ip
))
@receiver(user_login_failed)
def user_login_failed_callback(sender, credentials, **kwargs):
log.warning('login failed for: {credentials}'.format(
credentials=credentials,
))
출처
저는 몽고DB를 연동해놓았기 때문에,
사용자들이 로그인을 할 때마다 자동적으로 log라는 몽고DB 컬렉션에 넣도록 수정했어요.
로그인한 유저의 ip와 유저의 계정명(ID)이 DB에 삽입됩니다.
@receiver(user_logged_in)
def user_logged_in_callback(sender, request, user, **kwargs):
ip = request.META.get('REMOTE_ADDR')
log.insert_one({
'date' : datetime.now(),
'ip' : ip,
'username': user.username
})
로그인화면에 들어가서 로그인 하고 DB를 새로고침해보면
로그인 로그가 자동적으로 쌓인 것을 볼 수 있습니다
끝!
728x90
반응형
'프로그래밍 > Python' 카테고리의 다른 글
[python] CSV파일 리스트/딕셔너리가 문자열로 되어있어요 해결방법! (0) | 2022.05.26 |
---|---|
[pymongo] pandas csv파일을 mongoDB에 한꺼번에 insert하는 방법 (0) | 2022.05.25 |
[django] django templatetag date 날짜형식 맞춰넣기 (0) | 2022.04.19 |
[오류해결] ModuleNotFoundError: No module named 'pwd' (0) | 2022.04.17 |
[Python] Query String to Dictionary - URL 파라미터를 Dict로 만드는 법 (0) | 2022.03.10 |
댓글