使用WTForms提交时调用Python函数实现头像上传压缩的配置咨询
方案1:在表单验证通过后的视图逻辑中直接调用(最常用,逻辑清晰)
你只需要在对应路由的表单验证通过后,先拿到上传的文件对象,直接传入你写好的resize400函数处理后再保存即可,示例代码如下:
from flask import Flask, render_template, request from your_form_file import Profile app = Flask(__name__) @app.route('/profile', methods=['GET', 'POST']) def profile(): form = Profile() if form.validate_on_submit(): # 拿到上传的图片文件对象 uploaded_photo = form.photo.data # 仅当用户上传了文件时执行压缩 if uploaded_photo: processed_photo = form.resize400(uploaded_photo) # 接下来写处理后的图片保存逻辑即可 # processed_photo.save('your/save/path/xxx.jpg') return "修改成功" return render_template('profile.html', form=form)
方案2:绑定到FileField的过滤器,提交时自动处理
如果希望完全把逻辑封装在表单类里,不需要在视图层手动调用,可以给FileField添加filters参数,指定要自动执行的处理函数:
class Profile(FlaskForm): # 把resize400函数放到filters列表里,表单提交验证时会自动把上传的文件传入该函数处理 photo = FileField('Profile Picture', filters=[resize400]) submit = SubmitField('Save Changes') @staticmethod def resize400(inputImg): # 你的图片压缩代码 return processed_img
注意这里要把resize400设为静态方法,或者放在表单类外部定义,避免实例方法的self参数报错。
注意事项
- 确保你的
resize400函数支持接收WTForms的FileStorage类型的输入参数,该类型的接口和普通文件对象一致,你可以直接调用.read()等方法读取内容 - 如果允许用户不上传头像仅修改其他信息,要加非空判断避免空值传入压缩函数报错
内容的提问来源于stack exchange,提问作者Jason Li
相关产品推荐
相关产品推荐

