Django Trackman 帮助跟踪和记录。
项目描述
Django Trackman 帮助跟踪和记录。
功能
可定制模型:您将拥有基础模型和一个可以扩展以定义自己的跟踪模型的admin类混入。
单独的数据库:您可以选择为跟踪数据使用单独的数据库,因为其可能增长迅速。数据库路由器将帮助您实现Django的多数据库功能。
松散耦合:跟踪表不与您的应用程序表通过外键相关联。这确保了您的跟踪数据与应用程序数据保持独立。
管理操作跟踪:您可以选择跟踪Django管理操作。
API端点:您可以为django-rest-framework视图定义API端点。这可以用于跟踪通过API调用执行的操作。
安装
pip install django-trackman
将‘trackman’添加到Django设置中的INSTALLED_APPS
INSTALLED_APPS = (
...
'trackman',
...
)
然后通过将变量TRACKMAN_ENABLED设置为True来启用trackman。
操作跟踪模型
Django Trackman 可以用于创建自定义跟踪模型。以下是一个扩展Django Trackman的 TrackingActionModel` 的模型类示例
from trackman.models import TrackingActionModel
from django.db import models
class TrackingAction(TrackingActionModel):
team = models.CharField("Team", max_length=256, blank=True)
def __str__(self):
return f"Actor: {self.actor}, Action: {self.action}, Time: {self.created}"
class Meta:
verbose_name = "Action Log"
verbose_name_plural = "Action Logs"
Django Trackman 如何知道这个模型应该默认用于跟踪您的操作?您需要通过在设置中定义默认跟踪模型来指导它。
TRACKMAN_MODELS = {
"default": "tracking.TrackingAction",
"data-quality": "tracking.DataQualityTracking",
}
在这里,您会发现我们还定义了一个用于数据质量跟踪的附加跟踪模型。
基础跟踪模型
如果您的模型不是面向操作的,您始终可以扩展空的抽象模型 TrackingBaseModel,它只作为让Trackman知道您的模型应被视为跟踪模型的方式,从而在数据库路由时被考虑。
管理
在Django管理后台管理跟踪模型时,Django Trackman提供了混合类 TrackingModelAdminMixin。
from django.contrib import admin
from trackman.admin import TrackingModelAdminMixin
from .models import TrackingAction
class TrackingActionAdmin(TrackingModelAdminMixin, admin.ModelAdmin):
list_display = [
"id",
"actor",
"team",
"action",
"object",
"target",
"description",
"created",
]
search_fields = ["actor", "team"] + TrackingModelAdminMixin.action_log_search_fields
list_filter = ["team", "action"]
if settings.TRACKMAN_ENABLED:
admin.site.register(TrackingAction, TrackingActionAdmin)
在独立数据库上跟踪
当您想要出于性能、维护或数据完整性的原因将跟踪数据与主应用程序数据隔离时,可以将跟踪数据库操作路由到单独的数据库。
Django的多个数据库功能允许您在项目中使用多个数据库。它提供了指定哪些模型使用哪个数据库的灵活性 - 这由路由器定义。Django Trackman使用该功能将您的跟踪数据与应用程序数据隔离。
您首先需要在项目设置中指定应使用的数据库别名。
TRACKMAN_DATABASE_ALIAS = "tracking"
然后定义数据库访问。
DATABASES = {
"default": {
'ENGINE': 'django.db.backends.<app-database>',
'NAME': <app-database-name>,
'USER': <-app-database-user>,
'PASSWORD': <-app-database-password>,
'HOST': <-app-database-host>,
'PORT': <-app-database-port>,
},
}
if TRACKMAN_ENABLED:
DATABASE_ROUTERS = ["trackman.db_routers.TrackmanDatabaseRouter"]
DATABASES[TRACKMAN_DATABASE_ALIAS] = {
'ENGINE': 'django.db.backends.<tracking-db>',
'NAME': <tracking-database-name>,
'USER': <tracking-database-user>,
'PASSWORD': <tracking-database-password>,
'HOST': <tracking-database-host>,
'PORT': <tracking-database-port>,
}
如果您正在使用类似 dj-database-url 的工具与环境变量一起使用
from django.urls import dj_database_url.parse
DATABASES = {"default": dj_database_url.parse(env("APP_DATABASE_URL"))}
if TRACKMAN_ENABLED:
DATABASE_ROUTERS = ["trackman.db_routers.TrackingDatabaseRouter"]
db_url = env("TRACKING_DATABASE_URL")
DATABASES[TRACKMAN_DATABASE_ALIAS] = dj_database_url.parse(db_url)
跟踪管理操作
Django Trackman允许您跟踪Django管理操作 - 管理用户执行的操作。
设置Django Trackman 主文件是 trackman/signals.py,它需要在某些AppConfig的ready方法中导入。
假设您有一个可以用于设置信号的backoffice应用程序。
from django.apps import AppConfig
import sys
class BackofficeConfig(AppConfig):
name = "backoffice"
verbose_name = "Backoffice"
def ready(self):
if "migrate" not in sys.argv:
import trackman.signals # noqa
因此,所有管理操作都将复制到您的跟踪表中。
API端点
Django Trackman提供了一个混合类,您可以使用它与Django Rest Framework的ViewSet创建应用程序的API端点以跟踪操作。这可以用于跟踪前端操作。
以下是您如何在Django REST ViewSet中使用TrackingViewSetMixin进行操作跟踪的示例
from rest_framework import viewsets
from trackman.api import TrackingViewSetMixin
class ActionTrackingViewSet(TrackingViewSetMixin, viewsets.ViewSet):
model_alias = "default"
def clean_action_details(self, action_details):
# Do some clean-up here...
cleaned_data = action_details.copy()
return cleaned_data
model_alias 指定了用于保存跟踪数据的Django Trackman模型别名。
您需要将此新的ViewSet ActionTrackingViewSet添加到URL配置中,以便使其生效。
项目详情
下载文件
下载您平台上的文件。如果您不确定选择哪个,请了解有关 安装软件包 的更多信息。