跳转到主要内容

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配置中,以便使其生效。

项目详情


下载文件

下载您平台上的文件。如果您不确定选择哪个,请了解有关 安装软件包 的更多信息。

源分布

django-trackman-0.1.1.tar.gz (9.2 kB 查看哈希)

上传时间

构建分布

django_trackman-0.1.1-py3-none-any.whl (12.7 kB 查看哈希)

上传时间 Python 3

支持者

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面