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