天天看點

django架構源代碼中的自主生成權限表-django_admin_log

作者:不易9093

Django架構自帶的日志記錄表,用于記錄管理者在背景管理系統中的操作記錄。該表的字段和作用如下:

  • id:主鍵,記錄唯一辨別符。
  • action_time:操作時間,記錄管理者進行操作的時間。
  • user_id:操作者ID,記錄進行操作的管理者的ID,該字段是外鍵,關聯到Django的auth_user表中。
  • content_type_id:内容類型ID,記錄進行操作的模型的ID,該字段是外鍵,關聯到Django的contenttypes_contenttype表中。
  • object_id:對象ID,記錄進行操作的模型執行個體的ID。
  • object_repr:對象表示,記錄進行操作的模型執行個體的字元串表示。
  • action_flag:操作标志,記錄進行操作的類型,如添加、修改、删除等。
  • change_message:修改資訊,記錄進行操作的具體資訊,如修改的字段、修改前後的值等。

例如,當管理者在背景管理系統中修改了一個Book模型執行個體的title字段時,django_admin_log表中會記錄一條操作記錄,其中content_type_id字段對應Book模型的ID,object_id字段對應被修改的Book模型執行個體的ID,object_repr字段對應被修改的Book模型執行個體的title值,action_flag字段對應修改操作的标志,change_message字段記錄修改的具體資訊。這些資訊可以幫助管理者追蹤背景管理系統的操作曆史,友善管理和維護系統。

django架構源代碼中的自主生成權限表-django_admin_log

建設心中的夢幻城市

Django架構中預設表djangoadminlog是用于記錄管理背景的記錄檔的,其字段格式如下:

id:自增長的主鍵

action_time:操作時間

user_id:執行操作的使用者ID

contenttypeid:操作的模型ContentType的ID

object_id:操作的模型對象的ID

object_repr:操作的模型對象的字元串表示(如标題、名稱等)

action_flag:操作類型(1表示添加、2表示修改、3表示删除)

change_message:操作資訊(如修改前後的差異)

django架構源代碼中的自主生成權限表-django_admin_log

努力學習,掌握知識

可以通過Django内置的Admin子產品自動記錄,也可以通過代碼手動記錄。使用方法如下:

******自動記錄*******

在Django的settings.py中設定'django.contrib.admin.middleware.AdmnLogMiddleware'中間件即可自動記錄記錄檔。

********手動記錄********

可以通過導入from django.contrib.admin.models import LogEntry來使用LogEntry模型記錄記錄檔,示例代碼如下:

from django.contrib.admin.models import LogEntry, ADDITION, CHANGE, DELETION
from django.contrib.contenttypes.models import ContentType
from django.contrib.auth.models import User
# 擷取操作的模型
content_type = ContentType.objects.get_for_model(MyModel)
# 擷取操作的使用者
user = User.objects.get(username='admin')
# 記錄添加操作
LogEntry.objects.log_action(
user_id=user.id,
content_type_id=content_type.id,
object_id=my_model.id,
object_repr=my_model.__str__(),
action_flag=ADDITION,
change_message='添加了一個MyModel對象'
)
# 記錄修改操作
LogEntry.objects.log_action(
user_id=user.id,
content_type_id=content_type.id,
object_id=my_model.id,
object_repr=my_model.__str__(),
action_flag=CHANGE,
change_message='将MyModel對象的名稱從“舊名稱”修改為“新名稱”'
)
# 記錄删除操作
LogEntry.objects.log_action(
user_id=user.id,
content_type_id=content_type.id,
object_id=my_model.id,
object_repr=my_model.__str__(),
action_flag=DELETION,
change_message='删除了MyModel對象'
)           

以上是手動記錄記錄檔的示例代碼,需要注意的是,每個操作都需要傳入相應的參數,其中action_flag表示操作類型,change_message表示操作資訊。

django架構源代碼中的自主生成權限表-django_admin_log
django架構源代碼中的自主生成權限表-django_admin_log
django架構源代碼中的自主生成權限表-django_admin_log