Home > OS >  Flask wtf validators Length min and max does not works
Flask wtf validators Length min and max does not works

Time:10-02

I build Flask app with sqlite3 database and app.route add and app.route save

I have a problem with validators some of them works some does not works validators.DataRequired() works URLField() works

but validators.Length(min=1,max=15) does not works at all


from flask_wtf import FlaskForm #I aslo I also tried with Form
from wtforms import BooleanField, StringField, IntegerField, validators,SubmitField
from wtforms.fields.html5 import URLField

class AddRecValidators(FlaskForm): # <---I aslo I also tried with Form

    title = StringField('Title:',[validators.DataRequired(), validators.Length(min=1,max=35,message="Title too long max 35 characters")])
    authors = StringField('Authors:',[validators.Length(min=1,max=100)])
    published_date = IntegerField('Published date:',[validators.Length(min=1,max=4)])
    isbn_or_identifier = StringField('ISBN:',[validators.Length(min=1,max=15)])
    page_count = IntegerField('Page count:',[ validators.Length(min=1,max=10000)])
    language = StringField('Language:',[ validators.Length(min=1,max=3)])
    image_links = URLField('Image links:')
    
    submit = SubmitField(label=('Add to library'))

CodePudding user response:

It looks like you're using the wrong validators for the type of input you're validating.

validators.Length() is for strings, see here
For the integers, try using NumberRange

from flask_wtf import FlaskForm
from wtforms import BooleanField, StringField, IntegerField, validators,SubmitField
from wtforms.fields.html5 import URLField

class AddRecValidators(FlaskForm): 

    title = StringField('Title:',[validators.DataRequired(), validators.Length(min=1,max=35,message="Title too long max 35 characters")])
    authors = StringField('Authors:',[validators.Length(min=1,max=100)])
    published_date = IntegerField('Published date:',[validators.NumberRange(min=1,max=4)]) # <-- note change to NumberRange
    isbn_or_identifier = StringField('ISBN:',[validators.Length(min=1,max=15)])
    page_count = IntegerField('Page count:',[ validators.NumberRange(min=1,max=10000)]) # <-- note change to NumberRange
    language = StringField('Language:',[ validators.Length(min=1,max=3)])
    image_links = URLField('Image links:')
    
    submit = SubmitField(label=('Add to library'))

Also, here are the docs for flask-wtforms validators.

CodePudding user response:

Still nothing, even though my book database has the same limitations.

class My_library(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(35))
    authors = db.Column(db.String(25))
    published_date = db.Column(db.Integer)
    isbn_or_identifier = db.Column(db.String(15), unique=True)
    page_count = db.Column(db.String(10000))
    language = db.Column(db.String(3))
    image_links = db.Column(db.String(500))

I can create database entries via / addrec book titles exceeding 35 characters authors length over 100 characters published date with dates over a million page count above 10,000

neither limiting the number of characters in the database nor validation gives anything I have no idea why?

Does anybody have an idea?

  • Related