From 371b1ebbe363bacb74bbbc5d32fbfef4289f792b Mon Sep 17 00:00:00 2001 From: RobbieHan Date: Fri, 4 Jan 2019 19:54:50 +0800 Subject: [PATCH] signals --- apps/cmdb/apps.py | 2 +- apps/system/__init__.py | 1 + apps/system/apps.py | 8 ++++++- apps/system/signals.py | 50 +++++++++++++++++++++++++++++++++++++++ apps/system/views_user.py | 1 + 5 files changed, 60 insertions(+), 2 deletions(-) create mode 100644 apps/system/signals.py diff --git a/apps/cmdb/apps.py b/apps/cmdb/apps.py index 9e8f468..f555ae7 100644 --- a/apps/cmdb/apps.py +++ b/apps/cmdb/apps.py @@ -2,4 +2,4 @@ from django.apps import AppConfig class CmdbConfig(AppConfig): - name = 'cmdb' + name = 'cmdb' \ No newline at end of file diff --git a/apps/system/__init__.py b/apps/system/__init__.py index e69de29..ff8389f 100644 --- a/apps/system/__init__.py +++ b/apps/system/__init__.py @@ -0,0 +1 @@ +default_app_config = 'system.apps.SystemConfig' diff --git a/apps/system/apps.py b/apps/system/apps.py index 19fc95d..22886ad 100644 --- a/apps/system/apps.py +++ b/apps/system/apps.py @@ -2,4 +2,10 @@ from django.apps import AppConfig class SystemConfig(AppConfig): - name = 'apps.system' + name = 'system' + + def ready(self): + from .signals import create_menu + from .signals import user_logged_in_handler + from .signals import user_logged_out_handler + from .signals import user_login_failed_handler diff --git a/apps/system/signals.py b/apps/system/signals.py new file mode 100644 index 0000000..a2ea99f --- /dev/null +++ b/apps/system/signals.py @@ -0,0 +1,50 @@ +import logging + +from django.dispatch import receiver +from django.db.models.signals import post_save +from django.contrib.auth.signals import user_logged_in, user_logged_out, user_login_failed + +from .models import Role, Menu + +error_logger = logging.getLogger('sandbox_error') +info_logger = logging.getLogger('sandbox_info') + + +@receiver(post_save, sender=Menu) +def create_menu(sender, instance, **kwargs): + queryset = Role.objects.filter(id=1) + try: + admin_role = queryset.get() + admin_role.permissions.add(instance) + except queryset.model.DoesNotExist as e: + error_logger.error(e) + + +@receiver(user_logged_in) +def user_logged_in_handler(sender, request, user, **kwargs): + ip = request.META.get('REMOTE_ADDR') + msg = 'login user: {user}, remote ip: {ip}, action: login, status: successed'.format( + user=user.username, + ip=ip, + ) + info_logger.info(msg) + + +@receiver(user_logged_out) +def user_logged_out_handler(sender, request, user, **kwargs): + ip = request.META.get('REMOTE_ADDR') + msg = 'login user: {user}, remote ip: {ip}, action: logout, status: successed'.format( + user=user.username, + ip=ip, + ) + info_logger.info(msg) + + +@receiver(user_login_failed) +def user_login_failed_handler(sender, credentials, request, **kwargs): + msg = 'logout failed for: {credentials}'.format( + credentials=credentials, + ) + + info_logger.info(msg) + diff --git a/apps/system/views_user.py b/apps/system/views_user.py index 2066631..30274e2 100644 --- a/apps/system/views_user.py +++ b/apps/system/views_user.py @@ -40,6 +40,7 @@ class LoginView(View): redirect_to = request.GET.get('next', '/') login_form = LoginForm(request.POST) ret = dict(login_form=login_form) + print(request.META.get('REMOTE_ADDR')) if login_form.is_valid(): user_name = request.POST['username'] pass_word = request.POST['password']