[英]Django views.py code running automatically whenever I reload the server
我有使用 Django 应用程序的 view.py 中的 upload_log 端点从 CSV 文件上传并插入 MySQL 表的日志。 我在不同的子应用程序(还有 Django)中还有另一个 views.py,它解析日志表中的现有数据并根据条件将其拆分为不同的行。
问题是每当我重新加载创建重复的服务器时都会发生解析,除了我不打算让它这样。 我需要它,以便每当上传数据(触发发布)时,它会在上传的数据上运行 function 以解析日志。
编辑(澄清):当我执行 py manage.py runserver 时它不会执行 - 但它在我运行 runserver 命令和文件内的 CTRL + S 以重新加载服务器后执行。
如果有人指导我完成此操作,我将不胜感激。
这是该任务的views.py(日志应用程序):
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)
这是从 CSV(ParsedLogs 应用程序)上传的 views.py:
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
class 在顶层有一堆不在方法内部的代码。
每当导入模块时,都会执行此代码。
如果您希望代码不自动执行,请将其放在方法中,然后根据需要调用该方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.