forms.py
from wtforms import Form, FileField, StringField
from wtforms.validators import InputRequired
from flask_wtf.file import FileRequired, FileAllowed
class UploadFrom(Form):
avatar = FileField(validators=[FileRequired(), FileAllowed(['jpg', 'png', 'gif'])])
desc = StringField(validators=[InputRequired])
app.py
from flask import Flask, request, render_template
from test import UploadFrom
from werkzeug.utils import secure_filename
from werkzeug.datastructures import CombinedMultiDict
import os
app = Flask(__name__)
UPLOAD_PATH = os.path.join(os.path.dirname(__file__),'images')
@app.route('/upload', methods=['GET', 'POST'])
def upload():
if request.method == 'GET':
return render_template('upload.html')
else:
# CombinedMultiDict 将两个属性组合起来发给验证器
form = UploadFrom(CombinedMultiDict([request.form, request.files]))
if form.validate():
#获取方式1
# desc = request.form.get('desc')
# avatar = request.files.get('avatar')
#获取方式2
desc = form.desc.data
avatar = .files.avatar.data
# secure_filename 将文件名传递给它,可以将文件名安全地存储在常规文件系统中并传递到:func:`os.path.join`。
filename = secure_filename(avatar.filename)
avatar.save(os.path.join(UPLOAD_PATH, filename))
print(desc)
return '文件上传成功'
else:
print(form.errors)
return '文件上传失败'
参考《知了课堂》flask网课整理,用于交流学习