StopValidation() В маршруте без вызова wsgi debugger flask wtf

#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. как мне сделать это в маршруте, не добавляя его в класс?