在Django中创建日志数据库来记录创建、更新或删除对象的用户,可以通过以下步骤实现:
from django.db import models
from django.contrib.auth.models import User
class Log(models.Model):
ACTION_CHOICES = (
('C', '创建'),
('U', '更新'),
('D', '删除'),
)
action = models.CharField(max_length=1, choices=ACTION_CHOICES)
timestamp = models.DateTimeField(auto_now_add=True)
user = models.ForeignKey(User, on_delete=models.CASCADE)
object_name = models.CharField(max_length=255)
from django.db.models.signals import post_save, pre_delete
from django.dispatch import receiver
from django.contrib.auth.models import User
@receiver(post_save)
def log_object_creation_update(sender, instance, created, **kwargs):
if created:
action = 'C'
else:
action = 'U'
Log.objects.create(action=action, user=User.objects.get(username='当前用户'), object_name=sender.__name__)
@receiver(pre_delete)
def log_object_deletion(sender, instance, **kwargs):
Log.objects.create(action='D', user=User.objects.get(username='当前用户'), object_name=sender.__name__)
apps.py
文件中,将信号处理器与相应的模型信号进行关联。from django.apps import AppConfig
class MyAppConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'myapp'
def ready(self):
import myapp.signals # 导入信号处理器模块
python manage.py makemigrations
python manage.py migrate
现在,每当在Django中创建、更新或删除对象时,都会自动触发信号处理器,将相应的操作记录到日志数据库中。可以根据需要在视图函数或其他地方调用日志模型,以获取和展示日志信息。
注意:上述代码中的"当前用户"需要替换为实际的当前用户对象,可以通过Django的认证系统获取当前用户。另外,还可以根据具体需求对日志模型进行扩展,添加更多字段或关联其他模型。
领取专属 10元无门槛券
手把手带您无忧上云