проблема в использовании FileField и проверки в колбе вместе - PullRequest
0 голосов
/ 18 января 2019

Я использую wtforms для создания формы и проверки. это что-то вроде этого:

class Test(FlaskForm):

image = FileField('تصویر', validators=[
    FileAllowed(['jpg', 'png'], 'only image.')
])

year = IntegerField('سال', validators=[DataRequired(), year_check(max=15)])

month = IntegerField('سال', validators=[DataRequired(), NumberRange(1,31)])

day = IntegerField('روز', validators=[DataRequired(), NumberRange(1,31)])

def validate(self):
        # import pdb; pdb.set_trace()  
        if not FlaskForm.validate(self):
            return False

        if self.year.data and  self.month.data and self.day.data: 
            try:
                d = JalaliDate(int(self.year.data), int(self.month.data) , int(self.day.data))
            except:
                self.day.errors.append('تاریخ اشتباه می باشد')
                return False
        return True

Функция проверки дает день, месяц и год в Джалали Дата и, если они не валидны, делает ошибку проверки.

И HTML-форма выглядит так:

<form method="POST" action="" enctype="multipart/form-data" role="Post">
        <input type="hidden" name="csrf_token" value="{{ csrf_token() }}" />

        <div class="custom-file">
            {{ form.image.label (class_="custom-file-label") }}
            {{ form.image(class_="custom-file-input") }}
        </div>

в представлении я получаю filefield как это:

file = request.files['image']

и сохраните их в базе данных. при отправке формы эта ошибка проявляется:

Bad Request

The browser (or proxy) sent a request that this server could not understand.

когда я удаляю функцию FileField или функцию проверки, она работает правильно.

1 Ответ

0 голосов
/ 24 января 2019

проблема в этой части кода:

file = request.files['image']

когда произошла ошибка, когда любой файл выбирает для загрузки. Затем я изменил код:

if 'image' in request.files:
    file = request.files['image']

Я оштрафован на здесь

...