githb地址

drf-api-tracking api 接口的后台数据库记录

drf-tracking是什么?

drf-tracking是为DRF的view访问提供一个日志记录模块。使用mixin的方式无缝的和DRF相结合。 从源码结构上来看也是Django的一个APP项目,提供Model将日志记录到数据库、自定Manger操作等.其核心为该源码中的base_mixins.py模块。个人认为该项目非常适合新手阅读。

drf-api-tracking提供了Django模型和DRF视图混合,可将Django Rest Framework请求记录到数据库中。对于每个使用mixin的视图,您将在每个请求/响应周期获得以下属性:

型号栏位名称 描述 模型字段类型
user 用户(如果已认证),否则(否) 外键
username_persistent 即使删除了用户模型对象,仍保留用户名的静态字段 字符字段
requested_at 发出请求的日期时间 DateTimeField
response_ms 在视图代码中花费的毫秒数 PositiveIntegerField
path 请求的目标URI,例如 "/api/" 字符字段
view 请求的目标VIEW,例如 "views.api.ApiView" 字符字段
view_method 查看请求的目标方法,例如 "get" 字符字段
remote_addr 请求发起的IP地址(如果有,则为X_FORWARDED_FOR;如果没有,则为REMOTE_ADDR),例如, "127.0.0.1" GenericIPAddressField
host 请求的原始主机,例如 "example.com" URLField
method HTTP方法,例如 "GET" 字符字段
query_params 请求查询参数字典,文本形式 文本域
data POST数据字典(JSON或表单),以文本形式 文本域
response JSON响应数据 文本域
status_code HTTP状态代码,例如,200404 PositiveIntegerField

要求

  • Django 1.11、2.0、2.1、2.2、3.0
  • Django REST Framework和Python发行版支持您正在使用的Django版本 | Django的 | 蟒蛇 | DRF | | —- | —- | —- | | 1.11 | 2.7、3.5、3.6 | 3.5、3.6、3.7、3.8、3.9 | | 2.0 | 3.5、3.6、3.7 | 3.7、3.8、3.9 | | 2.1 | 3.5、3.6、3.7、3.8 | 3.7、3.8、3.9 | | 2.2 | 3.5、3.6、3.7、3.8 | 3.7、3.8、3.9 | | 3.0 | 3.5、3.6、3.7、3.8 | 3.7、3.8、3.9 |

基本使用

和其他模块安装一样,使用pip安装即可。

  1. $ pip install drf-tracking

之后将项目安装到项目settings的INSTALLD_APPS中,名字是rest_framework_tracking ,由于需要数据库,所以还要执行以下migrate操作。

  1. $ python manage.py migrate

我们只需要修改viewset文件即可

  1. from rest_framework.viewsets import ModelViewSet
  2. from rest_framework_extensions.cache.mixins import CacheResponseMixin
  3. from rest_framework_tracking.mixins import LoggingMixin
  4. from apps.test_api.models import BookModels, BookAnother
  5. from apps.test_api.serializers import BookModelsSerializer, BookAnotherSerializer
  6. class LoggingView(LoggingMixin, ModelViewSet):
  7. """
  8. LoggingMixin 导入的项
  9. """
  10. queryset = BookAnother.objects.all()
  11. serializer_class = BookAnotherSerializer

安全

默认情况下,drf-api-tracking隐藏这些字段的值{'api', 'token', 'key', 'secret', 'password', 'signature'}。默认列表未取自Django本身(https://github.com/django/django/blob/stable/1.11.x/django/contrib/auth/ init .py#L50)。

通过将要隐藏的字段放在sensitive_fields视图的参数中,可以使用自己的列表来完成此列表。

  1. class LoggingView(LoggingMixin, generics.CreateModelMixin, generics.GenericAPIView):
  2. sensitive_fields = {'my_secret_key', 'my_secret_recipe'}

默认情况下,drf-tracking允许从Django管理员修改API请求日志条目。这可能会在生产环境中出现数据完整性问题。为了更改此行为,您可以在文件中设置DRF_TRACKING_ADMIN_LOG_READONLY为。True``settings.py