将django admin中编辑用户权限以及组后的操作记录在指定数据库中
时间: 2023-05-27 14:07:26 浏览: 83
要将Django Admin中编辑用户权限和组的操作记录在指定的数据库中,您需要执行以下步骤:
1. 在您的Django项目中创建一个新的应用程序,用于记录操作日志。您可以将其命名为“logs”或类似的名称。
2. 在您的“logs”应用程序中创建一个新的模型,用于记录用户权限和组编辑操作的详细信息。例如,您可以创建一个名为“UserActionLog”的模型,并将其定义如下:
```
from django.db import models
from django.contrib.auth.models import User, Group
class UserActionLog(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
group = models.ForeignKey(Group, on_delete=models.CASCADE)
action = models.CharField(max_length=100)
timestamp = models.DateTimeField(auto_now_add=True)
def __str__(self):
return f"{self.user.username}: {self.action} {self.group.name}"
```
该模型包括一个外键引用“User”和“Group”模型,以及一个用于记录操作的“action”字段和一个时间戳字段。
3. 在您的Django项目的“settings.py”文件中配置日志记录应用程序的数据库。例如,如果您使用PostgreSQL数据库,您可以添加以下设置:
```
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'mydatabase',
'USER': 'mydatabaseuser',
'PASSWORD': 'mypassword',
'HOST': 'localhost',
'PORT': '5432',
},
'logs': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'mylogsdatabase',
'USER': 'mylogsdatabaseuser',
'PASSWORD': 'mypassword',
'HOST': 'localhost',
'PORT': '5432',
}
}
DATABASE_ROUTERS = ['logs.routers.LogsRouter']
```
这将为您的日志记录应用程序配置一个新的PostgreSQL数据库,并将其命名为“logs”。它还将指定一个名为“LogsRouter”的路由器,该路由器将Django Admin的所有操作记录到“logs”数据库中。
4. 在您的“logs”应用程序中创建一个名为“routers.py”的文件,并定义一个名为“LogsRouter”的路由器类,如下所示:
```
class LogsRouter:
def db_for_read(self, model, **hints):
if model._meta.app_label == 'logs':
return 'logs'
return None
def db_for_write(self, model, **hints):
if model._meta.app_label == 'logs':
return 'logs'
return None
def allow_relation(self, obj1, obj2, **hints):
if obj1._meta.app_label == 'logs' or obj2._meta.app_label == 'logs':
return True
return None
def allow_migrate(self, db, app_label, model_name=None, **hints):
if app_label == 'logs':
return db == 'logs'
return None
```
该路由器将所有与“logs”应用程序相关的模型操作路由到“logs”数据库中。
5. 在您的“logs”应用程序中创建一个名为“admin.py”的文件,并将以下代码添加到文件中:
```
from django.contrib.admin.models import LogEntry
from django.contrib.auth.models import User, Group
from django.contrib.contenttypes.models import ContentType
from django.dispatch import receiver
from django.db.models.signals import post_save, post_delete
from .models import UserActionLog
@receiver(post_save, sender=User)
def log_user_save(sender, instance, **kwargs):
content_type = ContentType.objects.get_for_model(instance)
log_entry = LogEntry.objects.filter(
content_type=content_type,
object_id=instance.id,
action_flag=2
).latest('id')
user_action = UserActionLog(
user=instance,
group=None,
action=log_entry.get_change_message(),
)
user_action.save()
@receiver(post_save, sender=Group)
def log_group_save(sender, instance, **kwargs):
content_type = ContentType.objects.get_for_model(instance)
log_entry = LogEntry.objects.filter(
content_type=content_type,
object_id=instance.id,
action_flag=2
).latest('id')
user_action = UserActionLog(
user=None,
group=instance,
action=log_entry.get_change_message(),
)
user_action.save()
@receiver(post_delete, sender=User)
def log_user_delete(sender, instance, **kwargs):
user_action = UserActionLog(
user=instance,
group=None,
action='User deleted',
)
user_action.save()
@receiver(post_delete, sender=Group)
def log_group_delete(sender, instance, **kwargs):
user_action = UserActionLog(
user=None,
group=instance,
action='Group deleted',
)
user_action.save()
```
这将使用Django信号来捕获Django Admin中与用户和组相关的所有操作,并将其记录到“logs”数据库中的“UserActionLog”模型中。
完成这些步骤后,您现在可以在Django Admin中编辑用户权限和组时记录操作。这些操作将被记录在“logs”数据库中的“UserActionLog”模型中。您可以使用Django ORM查询这些记录并将它们用于分析和监控用户操作。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)