Я работаю с формой фляги, в которой есть поле для загрузки изображения. Когда я отправляю форму, атрибут data
этого FileField
устанавливается на None
. Согласно документации на колбу.
FileField, предоставляемый Flask-WTF, отличается от WTForms, предоставляемого
поле. Он проверит, что файл является непустым экземпляром
FileStorage, иначе данные будут Нет.
Итак, я зарегистрировал свой код для этого isinstance(form.profile_picture, FileStorage)
, и это возвращает false
.
Ниже приведены соответствующие фрагменты кода
Forms.py
from flask_wtf import FlaskForm
from wtforms import PasswordField, StringField, SubmitField, TextAreaField
from wtforms.validators import DataRequired, Email, EqualTo, length
from flask_wtf.file import FileField, FileAllowed
class EditProfileForm(FlaskForm):
username = StringField('Username', validators=[DataRequired()])
about_me = TextAreaField('About Me', validators=[DataRequired(),
length(min=10, max=1000)])
profile_picture = FileField('Profile Picture', validators=[FileAllowed([
'jpg', 'png'])])
update = SubmitField('Update')
views.py
@user.route("/edit_profile/", methods=['GET', 'POST'])
def edit_profile():
form = EditProfileForm()
if form.validate_on_submit():
user = User.query.filter_by(username=current_user.username).first()
user.username = form.username.data
user.about_me = form.about_me.data
# if form.profile_picture.data: # this returns None
# user.profile_pic = process_image(form.profile_picture.data,
# user.username)
print(isinstance(form.profile_picture, FileStorage))
db.session.commit()
return redirect(url_for("user.profile", uname=current_user.username))
elif request.method == 'GET':
form.username.data = current_user.username
form.about_me.data = current_user.about_me
return render_template('user/user_edit_profile.html', form=form)
Так я что-то здесь упускаю? Я также прошел этот вопрос Flask-WTF FileField не устанавливает атрибут данных для экземпляра Werkzeug FileStorage , но в моем случае это не было проблемой, поскольку я не инициализировал форму с какими-либо данными.