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
CodePudding user response:
For this to work from POSTMAN, set the config
WTF_CSRF_ENABLED = False