#python #wtforms #flask-wtforms
#python #wtforms #flask-wtforms
Вопрос:
Мне нужно перезаписать валидатор в форме и применить свой собственный валидатор к этому конкретному маршруту. Если загруженное изображение не является jpg, оно не пройдет form.validate_on_submit()
проверку, и шаблон отобразит ошибки в html. Когда я пытаюсь использовать
raise StopValidation("image1 jpg only")
Он вызывает отладчик, и это мешает мне видеть маршрут. Я просто хочу, чтобы он отображался как field.error с другими ошибками.
@app.route('/test',methods=['GET','POST'])
def test():
form.image1.validators=[]
if request.method == "POST" and str(request.files['image1'].filename) != "":
if request.files['image1'].filename.split('.',1)[1] != "jpg" :
raise StopValidation("image1 jpg only")
print "image 1 not jpg"
if form.validate_on_submit():
# do stuff
return render_template('test.html')
Ответ №1:
Если вы хотите проверить только файл jpg, сделайте пользовательскую проверку вместо использования StopValidation и просто определите в своей форме.
def customvalidatorForImage(form, field):
allowed_file = ['jpg','jpeg','png','gif'] # you can modify your valid file list here
if form.image.data:
if form.image.data.split('.',1)[1] not in allowed_file:
raise ValidationError("Please enter a valid image file")
class MyForm(Form):
image = FileField("Image" , [customvalidatorForImage, validators.DataRequired("Image is required")])
Комментарии:
1. как мне сделать это в маршруте, не добавляя его в класс?