Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # Model #
- class User(db.Model):
- __tablename__ = 'users'
- id = db.Column(db.Integer, primary_key=True)
- username = db.Column(db.String(32), index=True)
- password_hash = db.Column(db.String(64))
- # User email information
- email = db.Column(db.String(255), nullable=False, unique=True)
- # User information
- first_name = db.Column(db.String(50), nullable=False, default='')
- last_name = db.Column(db.String(50), nullable=False, default='')
- # User Profile
- user_type = db.Column(db.String(50), nullable=False, default='')
- # verify if account enabled
- is_enabled = db.Column(db.Boolean(), nullable=False, default=False)
- def is_active(self):
- return self.is_enabled
- def hash_password(self, password):
- self.password_hash = pwd_context.encrypt(password)
- def verify_password(self, password):
- return pwd_context.verify(password, self.password_hash)
- def generate_auth_token(self, expiration=600):
- s = Serializer(app.config['SECRET_KEY'], expires_in=expiration)
- return s.dumps({'id': self.id})
- @staticmethod
- def verify_auth_token(token):
- s = Serializer(app.config['SECRET_KEY'])
- try:
- data = s.loads(token)
- except SignatureExpired:
- return None # valid token, but expired
- except BadSignature:
- return None # invalid token
- user = User.query.get(data['id'])
- return user
- # Schemas #
- class RegistrationSchema(Schema):
- not_blank = validate.Length(min=1, error='Field cannot be blank')
- id = fields.Integer(dump_only=True)
- email = fields.Email(required=True, validate=not_blank)
- username = fields.String(required=True, validate=not_blank)
- password = fields.String(load_only=True, required=True, validate=not_blank)
- first_name = fields.String(required=True, validate=not_blank)
- last_name = fields.String(required=True, validate=not_blank)
- user_type = fields.String(required=True, validate=not_blank)
- is_enabled = fields.Boolean()
- class Meta:
- type_ = 'user'
- self_url = '/api/users/{id}'
- self_url_kwargs = {'id': '<id>'}
- strict = True
- def J(*args, **kwargs):
- """Wrapper around jsonify that sets the Content-Type of the response to
- application/vnd.api+json.
- """
- response = jsonify(*args, **kwargs)
- response.mimetype = 'application/vnd.api+json'
- return response
- @app.route('/api/users', methods=['POST'])
- def new_user():
- schema = RegistrationSchema()
- input_data = request.get_json() or {}
- data, errs = schema.load(input_data)
- if errs:
- return J(errs), 422
- db.session.add(data)
- db.session.commit()
- return J(data)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement