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
what can be the reason for validation always failing in this case. Thanks in advance
Advertisement
Answer
For this to work from POSTMAN, set the config
WTF_CSRF_ENABLED = False