Flask-WTF documentation besagt, dass:Flask-WTF Filefield keine Daten Attribut auf eine Instanz Werkzeug Filestorage gesetzt
Flask-WTF Sie ein Filefield bietet das Hochladen von Dateien zu verarbeiten, wird es automatisch Daten aus Kolben ziehen .request.files, wenn das Formular veröffentlicht wird. Das Datenattribut von FileField ist eine Instanz von Werkzeug FileStorage.
Allerdings, wenn ich FileField
verwenden, das data
Attribut nach Veröffentlichung ist kein FileStorage
Objekt. Stattdessen ist es entweder None
(wenn ich mein Formular mit enctype="multipart/form-data"
definiere wie in der Dokumentation vorgeschlagen) oder der Dateiname als String (wenn ich kein enctype
definiere).
Hier ist die relevante Jinja2 Vorlage:
{% 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 %}
Das _form.html Makro:
{% 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 %}
Und hier ist der 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)
Mit den enctype
Attribut auf dem form
Element, der gedruckte Typ ist NoneType
; Ohne das Attribut enctype
ist der gedruckte Typ unicode
. Weder ist das FileStorage
Objekt durch die Dokumentation beworben.
Hallo Danke für Ihre Antworten. Ich kann den Ort, auf den Sie verweisen, nicht in der Quelle von form.py finden. Hast du ein bisschen mehr Details? –