Home > front end >  Validation of WTForms in Flask using Postman
Validation of WTForms in Flask using Postman

Time:03-09

I am trying to Create a user using WTForms. But always I am getting validation error when checked using POSTMAN. I am not sure why this happens

routes.py

users = Blueprint('users', __name__)

@users.route("/register", methods=['GET', 'POST'])
def register():
    if current_user.is_authenticated:
        return jsonify({"user":"already signed in"})
    form = CreateUserForm(request.form)
    if form.validate():
        hashed_password = bcrypt.generate_password_hash(form.password.data).decode('utf-8')
        user = User(username=form.username.data, email=form.email.data, password=hashed_password, 
                        role=form.role.data, activation_code=form.activation_code.form)
        db.session.add(user)
        db.session.commit()
        flash('Your account has been created! You are now able to log in', 'success')
        return jsonify({"message":"user auth success"})
    return jsonify({"message":"validation failed"})

forms.py

class CreateUserForm(FlaskForm):
    username = StringField('username',
                           validators=[DataRequired(), Length(min=2, max=20)])
    email = StringField('email',
                        validators=[DataRequired(), Email()])
    password = PasswordField('password', validators=[DataRequired()])
    confirm_password = PasswordField('confirm_password',
                                     validators=[DataRequired(), EqualTo('password')])
    role = StringField('role',
                           validators=[DataRequired()])
    activation_code = StringField('activation_code',
                           validators=[DataRequired()])
    # submit = SubmitField('Sign Up')

    def validate_username(self, username):
        user = User.query.filter_by(username=username.data).first()
        if user:
            raise ValidationError('That username is taken. Please choose a different one.')

    def validate_email(self, email):
        user = User.query.filter_by(email=email.data).first()
        if user:
            raise ValidationError('That email is taken. Please choose a different one.')

models.py

class User(db.Model, UserMixin):
    __tablename__ = 'users'
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(20))
    password = db.Column(db.String(255))
    email = db.Column(db.String(100), unique = True)
    image_file = db.Column(db.String(20), nullable=False, default='default.jpg')
    role = db.Column(db.String(6), default = 'Member')
    activation_code = db.Column(db.String(255), default = None)
    rememberme = db.Column(db.String(255))
    reset = db.Column(db.String(255), default = None)
    registered = db.Column(db.String(15), default = time_format())
    lastseen = db.Column(db.String(15), default = time_format(), onupdate = time_format())
    tfa_code = db.Column(db.String(255), default = None)
    ip = db.Column(db.String(255), default = None)
    

    def __init__(self, username, password, email, role, activation_code):
        self.username = username
        self.set_password(password)
        self.email = email
        self.role = role
        self.activation_code = activation_code

Postman screen shot

enter image description here

what can be the reason for validation always failing in this case. Thanks in advance

CodePudding user response:

For this to work from POSTMAN, set the config

WTF_CSRF_ENABLED = False
  • Related