Найти - Пользователи
Полная версия: Django загрузка файла с подменой
Начало » Django » Django загрузка файла с подменой
1
vetos
Доброго времени суток
Подскажите как правильно сделать проверку и подмену файла при загрузке.
Используеться Django. В поле filefield загружаеться файл в фомате JSON, который должен содержать массив чисел.
Содержимое файла проверяеться на соответсвие и форматируеться. Как записать уже отформатированные данные в файл вместо старых и сохранить. Либо создать новый файл с отформатированными данными и заменить им полученный из запроса.
Делаю проверку в методе clean поля.

  def clean_data(self):
    import numpy as np
    MAX_FILE_SIZE = 200 * 1024 * 1024
    file = self.cleaned_data['data']
    file_size = file.size
    if file_size > MAX_FILE_SIZE:
        raise forms.ValidationError("Very large file")
    raw_data = file.read().decode('utf-8')
    # json_2d_array_of_int32 = np.fromstring(raw_data)
    try:
        json_data = json.loads(raw_data)
    except (TypeError, ValueError):
        raise forms.ValidationError("Incorrect JSON format")
    else:
        json_2d_array_of_int32 = np.array(json_data)
        json_data = None
        data_dtype = json_2d_array_of_int32.dtype
        data_shape = json_2d_array_of_int32.shape
        datacorrect = (
            (
             data_dtype == np.dtype('int32')
             or
             data_dtype == np.dtype('float64')
            )
            and
            len(data_shape) == 2
        )
        if not datacorrect:
            raise forms.ValidationError("Incorrect data format!"
                                        "Try file with JSON array_of_arrays-like structure")
        # Как тут правильно сделать подмену.
        # outfile = TemporaryFile()
        np.save('temp_json', json_2d_array_of_int32)
        # print(type(np.array2string(json_2d_array_of_int32)))
        print(np.array_str(json_2d_array_of_int32)[1:-1])
        return file   

Рассматриваю даже вариант сохранения в специальном формате numpy.
slav0nic
советую познакомиться c json schema и валидировать через неё, для начала
на счёт подмены, обычно в pre_save() методе делается (только это поля модели, а не формы)
например в DateTimeField используется: https://github.com/django/django/blob/1.10.3/django/db/models/fields/__init__.py#L1253

если в форме, то всё верно, переопределяете clean_<fieldname> и модифицируете на лету
или вопрос как UploadedFile модифицировать?
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB