FileField和在flask中一起验证时出现问题

时间:2019-01-18 11:54:21

标签: python validation flask flask-wtforms

我正在使用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

验证功能会在jalali date中给出日期,月份和年份,如果不是,则会产生验证错误。

和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>

在视图中,我得到这样的文件字段:

file = request.files['image']

并将其保存在数据库中。 提交表单时显示此错误:

Bad Request

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

当我删除FileField或验证功能上的内容时,它将正常工作。

1 个答案:

答案 0 :(得分:0)

问题是这部分代码:

file = request.files['image']

选择任何文件上传时发生错误。然后我更改了代码:

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

我从here对其进行了罚款