文件上传:
模版中需要修改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'
![]() | 1 geeklian 2017-03-28 11:45:00 +08:00 werkzeug.utils.secure_filename() 会去掉所有中文字符...题主有什么其他的好办法么 |