
文件上传:
模版中需要修改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() 会去掉所有中文字符...题主有什么其他的好办法么 |