【问题标题】:FileField Validation using Flask not working properly使用 Flask 的 FileField 验证无法正常工作
【发布时间】:2015-05-28 23:31:11
【问题描述】:

我正在使用 Flask-WTF 验证我的表单,但对于 FileField,它没有正确验证,它没有检测到文件。

form.py

class addVendorForm(Form):
    name = StringField('Vendor Name',
                       validators=[Required()],
                       description='Eg. Alcatel Lucent'
                       )
    remarks = TextAreaField('Remarks', widget=TextArea())
    profile = StringField('Profile', widget=TextArea())
    file = FileField('Logo',validators=[
           FileRequired()])
    short_hand = StringField(validators=[
       Required()])
    notified = BooleanField()

views.py

@application.route('/memo', methods=['GET','POST'])
@application.route('/memo/<int:record_id>', methods=['GET','POST'])
@login_required
def add_memo(record_id=None):
    if record_id is None:
        record = Vendor()
        form = addVendorForm(request.form)
    else:
        record = Memo.query.filter_by(id=record_id).first_or_404()
        form = addMemoForm(obj=record)

    if request.method == 'POST' and form.validate():
        form.populate_obj(record)
        db.session.add(record)
        upload()
        db.session.commit()

        flash('<strong>Success!</strong> Database Updated.')
        return redirect(url_for('add_memo'))

    return render_template('add-form.html', form=form)

而且表单对象似乎没有保存文件。

    >>> pp(form.file.__dict__)
    'data': u'',
    'default': None,
    'description': u'',
    'errors': [],
    'filters': (),
    'flags': <wtforms.fields.Flags: {}>,
    'id': 'file',
    'label': Label('file', 'Logo'),
    'meta': <wtforms.form.Meta object at 0x7f9ac40e80d0>,
    'name': 'file',
    'object_data': None,
    'process_errors': [],
    'raw_data': [],
    'short_name': 'file',
    'type': 'FileField',

但它在请求中。

>>> pp(request.files)
ImmutableMultiDict([('file', <FileStorage: u'cleaned data.xlsx' ('application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')>)])   

我还可以实施哪些其他验证方法?我只需要实现 FileRequired。

【问题讨论】:

    标签: python validation flask flask-wtforms


    【解决方案1】:

    改变

    form = addVendorForm(request.form)
    

    form = addVendorForm()
    

    【讨论】:

      【解决方案2】:

      我在文档中没有看到 FileRequired() 验证器。 你试过Required()吗?

      【讨论】:

      • 文件验证在文件模块中.. from flask.ext.wtf.file import FileRequired, FileField, FileAllowed BTW 我已经解决了这个问题.. 我用解决方案更新了我的问题:) thnx btw
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多