diff --git a/.gitignore b/.gitignore index 48019c7..ab115d3 100644 --- a/.gitignore +++ b/.gitignore @@ -22,3 +22,5 @@ pnpm-debug.log* *.njsproj *.sln *.sw? +*.log +db.sqlite3 \ No newline at end of file diff --git a/TP_API/settings.py b/TP_API/settings.py index b26eba1..0054cec 100644 --- a/TP_API/settings.py +++ b/TP_API/settings.py @@ -41,7 +41,7 @@ INSTALLED_APPS = [ 'rest_framework', 'django_filters', 'corsheaders', - 'app' + 'app', ] MIDDLEWARE = [ @@ -158,4 +158,52 @@ REST_FRAMEWORK = { 'DATETIME_FORMAT': "%Y-%m-%d %H:%M:%S", 'DATE_FORMAT': "%Y-%m-%d", 'DEFAULT_FILTER_BACKENDS': ['django_filters.rest_framework.DjangoFilterBackend'], -} \ No newline at end of file +} + +# 配置日志 +LOG_DIR = os.path.join(BASE_DIR, 'logs/') +LOGGING = { + 'version': 1, # 保留字 + 'disable_existing_loggers': False, # 是否禁用已经存在的日志实例 + 'formatters': { # 定义日志的格式 + 'standard': { + 'format': '[%(asctime)s][%(threadName)s:%(thread)d][task_id:%(name)s][%(filename)s:%(lineno)d]' + '[%(levelname)s][%(message)s]' + }, + 'simple': { + 'format': '[%(levelname)s][%(asctime)s][%(filename)s:%(lineno)d]%(message)s' + }, + 'collect': { + 'format': '%(message)s' + } + }, + 'filters': { # 定义日志的过滤器 + 'require_debug_true': { + '()': 'django.utils.log.RequireDebugTrue', + }, + }, + 'handlers': { # 日志处理程序 + 'console': { + 'level': 'DEBUG', + 'filters': ['require_debug_true'], # 只有在Django debug为True时才在屏幕打印日志 + 'class': 'logging.StreamHandler', + 'formatter': 'simple', + # 'filename': os.path.join(BASE_LOG_DIR, "tpservice.log") + }, + 'file': { + 'level': 'DEBUG', + 'class': 'logging.handlers.TimedRotatingFileHandler', + 'filename': os.path.join(LOG_DIR, 'debug.log'), # 日志文件 + 'when': "D", + 'interval': 1, + 'formatter': 'standard' + }, + }, + 'loggers': { # 日志实例 记录器 + 'mylogger': { # 默认的logger应用如下配置 + 'handlers': ['console', 'file'], + 'level': 'DEBUG', + 'propagate': True, # 是否向上一级logger实例传递日志信息 + }, + }, +} diff --git a/app/admin.py b/app/admin.py index 8c38f3f..a932cee 100644 --- a/app/admin.py +++ b/app/admin.py @@ -1,3 +1,5 @@ from django.contrib import admin # Register your models here. +from app.models import TP +admin.site.register(TP) diff --git a/app/models.py b/app/models.py index 280166c..e280453 100644 --- a/app/models.py +++ b/app/models.py @@ -5,31 +5,37 @@ class TP(models.Model): # uid uid = models.AutoField(primary_key=True) # 视频哈希 - video_hash = models.CharField(max_length=50) + video_hash = models.CharField(max_length=50, verbose_name='视频哈希') # 记录仪时间 - record_time = models.DateTimeField() + record_time = models.DateTimeField(verbose_name='记录仪时间') # 警号 - police_id = models.CharField(max_length=50) + police_id = models.CharField(max_length=50, null=True, blank=True, verbose_name='警号') # 警号可为空可不传 # 事件类型 - event_type = models.CharField(max_length=50) + event_type = models.CharField(max_length=50, verbose_name='事件类型') # 是否违规 - is_violation = models.BooleanField() + is_violation = models.BooleanField(verbose_name='是否违规') # 缩略图 - small_image = models.CharField(max_length=100) + small_image = models.CharField(max_length=100, verbose_name='缩略图') # 相对时间 - relative_time = models.FloatField() + relative_time = models.FloatField(verbose_name='相对时间') # 视频路径 - video_dir = models.CharField(max_length=100) + video_dir = models.CharField(max_length=100, verbose_name='视频路径') # 车牌号 - car_number = models.CharField(max_length=50) + car_number = models.CharField(max_length=50, verbose_name='车牌号', null=True, blank=True) # 车牌可为空可不传 # 分析结果 - ai_analysis = models.CharField(max_length=255) + ai_analysis = models.CharField(max_length=255, verbose_name='分析结果', null=True, blank=True) # 分析结果可为空可不传 # 加入时间 - add_time = models.DateTimeField(auto_now_add=True) + add_time = models.DateTimeField(auto_now_add=True, verbose_name='加入时间') # 更新时间 - update_time = models.DateTimeField(auto_now=True) + update_time = models.DateTimeField(auto_now=True, verbose_name='更新时间') # 是否显示 - is_display = models.BooleanField(default=True) + is_display = models.BooleanField(default=True, verbose_name='是否显示') + + class Meta: + db_table = "app_tp" + + # 排序 uid倒序 + ordering = ['-uid'] diff --git a/app/serializers.py b/app/serializers.py index e355336..78bf8f4 100644 --- a/app/serializers.py +++ b/app/serializers.py @@ -20,6 +20,10 @@ class SerialFilter(FilterSet): record_time = django_filters.DateTimeFilter(field_name='record_time', lookup_expr='icontains') police_id = django_filters.CharFilter(field_name='police_id', lookup_expr='icontains') event_type = django_filters.CharFilter(field_name='event_type', lookup_expr='icontains') + # 记录时间范围查询 + start_time = django_filters.DateTimeFilter(field_name='record_time', lookup_expr='gte') + end_time = django_filters.DateTimeFilter(field_name='record_time', lookup_expr='lte') + class Meta: # 指定模型 models = TP diff --git a/app/urls.py b/app/urls.py index 2d77315..1e43fe6 100644 --- a/app/urls.py +++ b/app/urls.py @@ -23,4 +23,4 @@ router.register('', views.ModelQuery) urlpatterns = [ path('', include(router.urls)), -] \ No newline at end of file +] diff --git a/app/views.py b/app/views.py index f59f177..7b3c4d8 100644 --- a/app/views.py +++ b/app/views.py @@ -10,7 +10,7 @@ from app.pagination import MyPageNumberPagination class ModelQuery(viewsets.ModelViewSet): # 查询类 - queryset = TP.objects.all().order_by("uid") + queryset = TP.objects.all().order_by("-uid") # 按照uid倒序 # 序列化类 serializer_class = SerialMyModel # 分页类 @@ -18,4 +18,3 @@ class ModelQuery(viewsets.ModelViewSet): # 条件筛选 filterset_class = SerialFilter -