瓶,跆拳道的WERKZEUG FileStorage的實例documentation指出:燒瓶跆拳道的FileField不設置數據屬性
瓶,跆拳道爲您提供的FileField來處理文件上傳後,會自動吸取燒瓶數據.request.files如果表單已發佈。 FileField的數據屬性將是Werkzeug FileStorage的一個實例。
然而,當我使用FileField
,張貼後data
屬性不是FileStorage
對象。相反,它可以是None
(如果我按照文檔中的建議使用enctype="multipart/form-data"
定義我的表單)或文件名作爲字符串(如果我沒有定義enctype
)。
下面是相關的Jinja2模板:
{% from "_form.html" import render_field %}
{% block body %}
<section class="page-width-container" id="offset-content">
<div id="utility-box">
<h1 class="utility-header">Settings</h1>
{{ message }}
<form action="/settings" method="post" enctype="multipart/form-data">
{{ render_field(form.photo) }}
<input type="submit" class="form-action" value="Save" />
</form>
</div>
</section>
{% endblock %}
的_form.html宏:
{% macro render_field(field) %}
<div class="field">
{{ field.label }}
<span class="form-input">{{ field()|safe }}</span>
<div class="clear"></div>
{% if field.errors %}
<ul class="errors">
{% for error in field.errors %}
<li>{{ error }}</li>
{% endfor %}
</ul>
{% endif %}
</div>
{% endmacro %}
這裏是Python:
from flask import Blueprint, render_template, request
from flask.ext.wtf import Form
from flask.ext.wtf.file import FileField, FileRequired
settings_bp = Blueprint('settings', __name__)
class SettingsForm(Form):
photo = FileField('Photo', validators=[
FileRequired('no file!'),
])
@settings_bp.route('/settings', methods=['GET', 'POST'])
def login():
form = SettingsForm(request.form)
form.validate_on_submit()
print(type(form.photo.data))
return render_template('settings.html', form=form, message=form.photo.data)
隨着enctype
屬性form
元素,印刷類型爲NoneType
;沒有enctype
屬性,則打印類型爲unicode
。本文檔所公佈的FileStorage
對象也不是。
嗨感謝您的回答。我無法在form.py的源代碼中找到您引用的位置。你有更多的細節? –