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状态代码,例如,200 或404 |
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安装即可。
$ pip install drf-tracking
之后将项目安装到项目settings的INSTALLD_APPS
中,名字是rest_framework_tracking
,由于需要数据库,所以还要执行以下migrate操作。
$ python manage.py migrate
我们只需要修改viewset文件即可
from rest_framework.viewsets import ModelViewSet
from rest_framework_extensions.cache.mixins import CacheResponseMixin
from rest_framework_tracking.mixins import LoggingMixin
from apps.test_api.models import BookModels, BookAnother
from apps.test_api.serializers import BookModelsSerializer, BookAnotherSerializer
class LoggingView(LoggingMixin, ModelViewSet):
"""
LoggingMixin 导入的项
"""
queryset = BookAnother.objects.all()
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
视图的参数中,可以使用自己的列表来完成此列表。
class LoggingView(LoggingMixin, generics.CreateModelMixin, generics.GenericAPIView):
sensitive_fields = {'my_secret_key', 'my_secret_recipe'}
默认情况下,drf-tracking允许从Django管理员修改API请求日志条目。这可能会在生产环境中出现数据完整性问题。为了更改此行为,您可以在文件中设置DRF_TRACKING_ADMIN_LOG_READONLY
为。True``settings.py