文件上传:
模版中需要修改form
的enctype
为multipart/form-data
.
文件名必须通过werkzeug.utils.secure_filename()
这个函数进行安全处理才能使用。
在包含文件表单验证的时候,应该使用werkzeug.datastructures import CombinedMultiDict
来把flask.request.files
和flask.request.form
来进行合并再传到form
中进行验证。
values = CombinedMultiDict([flask.request.files,flask.request.form])
form = UploadForm(values)
限制文件类型:
avatar = FileField(label=u'文件',validators=[FileRequired(),
FileAllowed(['jpg','png'],message=u'jpg/png allowde!')])
上传文件的代码:
forms.py 文件:
from flask_wtf import FlaskForm
from wtforms import StringField
from wtforms.validators import InputRequired
from flask_wtf.file import FileField,FileRequired,FileAllowed
class UploadForm(FlaskForm):
avatar = FileField(label=u'文件',validators=[FileRequired(),
FileAllowed(['jpg','png'],message=u'jpg/png allowde!')])
desc = StringField(label=u'描述',validators=[InputRequired()])
视图函数:
values = CombinedMultiDict([flask.request.files,flask.request.form])
form = UploadForm(values)
if form.validate():
avatar = form.avatar.data
filename = secure_filename(avatar.filename)
file_path = os.path.join('C:\images',filename)
# 文件名是非常危险的
avatar.save(file_path)
desc = form.desc.data
print 'desc:',desc
return 'success'
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.