master
kongfp 2 years ago
parent b3f103ed22
commit 9171178d92

@ -18,6 +18,8 @@ class XZNSH(models.Model):
is_violation = models.BooleanField(verbose_name='是否违规', null=True, blank=True)
# 违规原因
violation_reason = models.CharField(max_length=255, verbose_name='违规原因', null=True, blank=True)
# 相对时间
relative_time = models.FloatField(default=0, verbose_name='相对时间')
# 缩略图
thumbnail = models.CharField(max_length=100, verbose_name='缩略图')
# 视频路径

@ -30,7 +30,7 @@ class SerialFilter(FilterSet):
end_time = django_filters.DateTimeFilter(field_name='record_time', method='time_range_filter')
# todo bug: start_time 和 end_time同一天的情况 done
violation = django_filters.NumberFilter(field_name='is_violation', method='is_violation_query')
violation_type = django_filters.CharFilter(field_name='ai_analysis', lookup_expr='icontains')
violation_type = django_filters.CharFilter(field_name='violation_reason', lookup_expr='icontains')
def time_range_filter(self, queryset, name, value):
"""

@ -25,5 +25,7 @@ urlpatterns = [
path('', include(router.urls)),
path('add_user', views.RegisterLoginViewSet.as_view({"post": "register"})),
path('login', views.LoginView.as_view({"post": "login"})),
path('events', views.XZNSHModelViewSet.as_view({"get": "get_events"}))
path('events', views.XZNSHModelViewSet.as_view({"get": "get_events"})),
path('scenes', views.XZNSHModelViewSet.as_view({"get": "get_scenes"})),
path('violation_reasons', views.XZNSHModelViewSet.as_view({"get": "get_violation_reason"}))
]

@ -27,17 +27,32 @@ class XZNSHModelViewSet(viewsets.ModelViewSet):
filterset_class = SerialFilter
def get_events(self, request, *args, **kwargs):
res = self.queryset.values('event_type').annotate(count=Count('event_type')).order_by('-count')
result = list(res)
res = self.queryset.values("event_type").filter(event_type__isnull=False).annotate(count=Count("event_type")).order_by('-count')
response = self.filter_filed("event_type", res)
return Response(response)
def get_scenes(self, request, *args, **kwargs):
res = self.queryset.values("scene").filter(scene__isnull=False).annotate(count=Count("scene")).order_by('-count')
response = self.filter_filed("scene", res)
return Response(response)
def get_violation_reason(self, request, *args, **kwargs):
res = self.queryset.values("violation_reason").filter(violation_reason__isnull=False).annotate(count=Count("violation_reason")).order_by('-count')
response = self.filter_filed("violation_reason", res)
return Response(response)
@staticmethod
def filter_filed(filed_name, query_set):
result = list(query_set)
data = dict()
for index, item in enumerate(result, 1):
data[index] = item.get('event_type')
data[index] = item.get(filed_name)
response = {
'success': True,
'msg': '查询成功',
'data': data
}
return Response(response)
return response
class RegisterLoginViewSet(viewsets.ModelViewSet):

@ -15,7 +15,7 @@ class CheckTokenMiddleware(MiddlewareMixin):
def process_request(self, request):
# todo 登录时不需要校验token
path_info = request.path_info
if path_info.endswith('login'):
if path_info.endswith('login') or path_info.endswith('add_user'):
return
my_auth = request.META.get('HTTP_TOKEN')
if not my_auth:

Loading…
Cancel
Save