2016-10-13 3 views
-1

Мне нужно перезаписать валидатор в форме и применить мой собственный валидатор к этому конкретному маршруту. Когда загруженное изображение не является jpg, оно не пройдет проверку form.validate_on_submit(), и шаблон отобразит ошибки в html. Когда я пытаюсь использоватьStopValidation() В пути без повышения wsgi отладочной колбы wtf

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') 

ответ

0

Если вы хотите проверить только 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")]) 
+0

как это сделать на маршруте без добавления его в класс? –