Код Django views.py запускается автоматически при каждой перезагрузке сервера

У меня есть журналы, которые загружаются и вставляются в таблицу MySQL из CSV файлов с помощью конечной точки upload_log в файле views.py приложения Django. У меня также есть другой views.py в другом приложении (тоже Django), который анализирует существующие данные из таблицы журналов и разбивает их на различные строки в соответствии с условиями.

Проблема в том, что парсинг происходит каждый раз, когда я перезагружаю сервер, что создает дубликаты, помимо того, что я не намерен делать это таким образом. Мне нужно сделать так, чтобы каждый раз, когда данные загружаются (пост срабатывает), запускалась функция для этих загруженных данных, чтобы разобрать логи.

Редактирование (уточнение): Не выполняется, когда я делаю py manage.py runserver - Но выполняется после того, как я выполнил команду runserver и CTRL + S внутри файла, чтобы перезагрузить сервер.

Я буду благодарен, если кто-нибудь поможет мне в этом.

Вот views.py этой задачи (приложение Logs):

from rest_framework import viewsets
from rest_framework.decorators import action
from api.packets.models import Fields
from .models import LogsParsed
from api.logs.models import Logs
from .serializers import LogsParsedSerializer

class getLogs(viewsets.ModelViewSet):    
    
    serializer_class = LogsParsedSerializer
    queryset = LogsParsed.objects.all()            

    parsedLogs=[]
    for log in Logs.objects.all():        
        fields = Fields.objects.filter(pac_id=log.message_id_decimal)
        binaryTest=log.data_binary
        
        for field in fields:
            items=LogsParsed(
                pac_id=log.message_id_decimal,
                log_id=log.log_id,
                log_date=log.log_date,
                fld_name=field.fld_name,
                value=binaryTest[field.fld_offset:field.fld_offset+field.fld_len]
                )
            parsedLogs.append(items)
            
    LogsParsed.objects.bulk_create(parsedLogs)

А вот views.py выгрузки из CSV (приложение ParsedLogs):

from django.contrib import messages
from rest_framework import viewsets
from rest_framework.decorators import action
from datetime import datetime
from rest_framework.response import Response

from .models import Logs
from .serializers import LogsSerializer

import pandas as pd


class LogsViewSet(viewsets.ModelViewSet):

    serializer_class = LogsSerializer
    queryset = Logs.objects.all()

    @action(detail=False, methods=['POST'])
    def upload_log(self, request):
        """Upload data from CSV, with validation."""
        if request.method == 'POST':
            file = request.FILES['file']
            data_file = pd.read_csv(file, sep=';', encoding="utf8")
            file_name = request.FILES['file'].name
            _datetime = datetime.now()
            file_upload_date = _datetime.strftime("%Y_%m_%d %H:%M:%S")
      
            
            
            # Swap every 2-character blocks with the next 2-character blocks
            def swap_bits(data):

                blocks = [data[i:i+4] for i in range(0, len(data), 4)]
                for i in range(len(blocks)):
                    blocks[i] = blocks[i][2:] + blocks[i][:2]
                return "".join(blocks)
            

            # Iterating through rows
            row_iter = data_file.iterrows()
            logs = [
                        Logs(
                            file_upload_date=file_upload_date,
                            file_name=file_name,
                            log_date=row["Date and time[ms]"],
                            stamp=row[" Stamp"],
                            message_id=row[" Message Id"],
                            message_id_decimal=int(row[" Message Id"], 16),
                            length=row[" Length"],
                            data=row[" Data"],
                            # data_binary=swap_bits(row[" Data"])
                            data_binary=bin(int(swap_bits(row[" Data"]), 16))[2:]
                        )
                        for index, row in row_iter
                    ]
                            
            Logs.objects.bulk_create(logs)
            
            
            return Response({"success": "Successfully uploaded logs!"})

Как отметил @Durai, класс getLogs имеет код на верхнем уровне, который не находится внутри метода.

Этот код будет выполняться всякий раз, когда модуль импортируется, поскольку он является частью класса definition.

Если вы хотите, чтобы код не выполнялся автоматически, поместите его внутрь метода внутри класса, а затем вызывайте метод по мере необходимости.

Вернуться на верх