Есть задача парсить csv файл и на основании полученных данных создавать инстансы в БД. На бэке DRF на фронте React.
Особенность в том, что обработка файла происходит не совсем скрыто. Логика такая:
Есть кнопка загрузки фала. Файл загружается, валидируется но сразу в БД ничего не создается. Появляется окно со списком спаршеных данных (типо таблицы) и в этом окне новая кнопка confirm по нажатию на которую уже запрос в БД идет.
Что я сейчас сделал:
1. Создал класс для загрузки файла (кнопка Upload)
class FileUploadView(APIView):
parser_classes = ( MultiPartParser, FormParser)
def put(self, request, format=None):
if 'file' not in request.data:
raise ParseError("Empty content")
f = request.data['file']
filename = f.name
file_ext = filename[-4:]
if file_ext == '.csv':
file = default_storage.save(filename, f)
r = csv_file_parser(file)
status = 204
else:
status = 406
r = "File format error"
return Response({'response': r}, status=status)
В классе вызывается функция
csv_file_parser результатом которой является json содержащий все спаршенные данные.
def csv_file_parser(file):
with open(file) as csvfile:
reader = csv.DictReader(csvfile)
line_count = 1
result_dict= {}
for row in reader:
for key, value in row.items():
if not value:
raise ParseError('Missing value in file. Check the {} line'.format(line_count))
new = {line_count: row}
result_dict.update(new)
line_count += 1
return json.dumps(result_dict)
Код рабочий (если есть идеи по его оптимизации - велкам :) ). Что я не могу сообразить - это как мне впихнуть кнопку Confirm в код. Что и как использовать для этого?