Advertisement
Guest User

Untitled

a guest
Jan 29th, 2017
157
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.74 KB | None | 0 0
  1. # Model #
  2.  
  3. class User(db.Model):
  4.     __tablename__ = 'users'
  5.     id = db.Column(db.Integer, primary_key=True)
  6.     username = db.Column(db.String(32), index=True)
  7.     password_hash = db.Column(db.String(64))
  8.  
  9.     # User email information
  10.     email = db.Column(db.String(255), nullable=False, unique=True)
  11.  
  12.     # User information
  13.     first_name = db.Column(db.String(50), nullable=False, default='')
  14.     last_name = db.Column(db.String(50), nullable=False, default='')
  15.  
  16.     # User Profile
  17.     user_type = db.Column(db.String(50), nullable=False, default='')
  18.  
  19.     # verify if account enabled
  20.     is_enabled = db.Column(db.Boolean(), nullable=False, default=False)
  21.  
  22.     def is_active(self):
  23.         return self.is_enabled
  24.  
  25.     def hash_password(self, password):
  26.         self.password_hash = pwd_context.encrypt(password)
  27.  
  28.     def verify_password(self, password):
  29.         return pwd_context.verify(password, self.password_hash)
  30.  
  31.     def generate_auth_token(self, expiration=600):
  32.         s = Serializer(app.config['SECRET_KEY'], expires_in=expiration)
  33.         return s.dumps({'id': self.id})
  34.  
  35.     @staticmethod
  36.     def verify_auth_token(token):
  37.         s = Serializer(app.config['SECRET_KEY'])
  38.         try:
  39.             data = s.loads(token)
  40.         except SignatureExpired:
  41.             return None    # valid token, but expired
  42.         except BadSignature:
  43.             return None    # invalid token
  44.         user = User.query.get(data['id'])
  45.         return user
  46.  
  47.  
  48. # Schemas #
  49.  
  50.  
  51. class RegistrationSchema(Schema):
  52.     not_blank = validate.Length(min=1, error='Field cannot be blank')
  53.     id = fields.Integer(dump_only=True)
  54.     email = fields.Email(required=True, validate=not_blank)
  55.     username = fields.String(required=True, validate=not_blank)
  56.     password = fields.String(load_only=True, required=True, validate=not_blank)
  57.     first_name = fields.String(required=True, validate=not_blank)
  58.     last_name = fields.String(required=True, validate=not_blank)
  59.     user_type = fields.String(required=True, validate=not_blank)
  60.     is_enabled = fields.Boolean()
  61.  
  62.     class Meta:
  63.         type_ = 'user'
  64.         self_url = '/api/users/{id}'
  65.         self_url_kwargs = {'id': '<id>'}
  66.         strict = True
  67.  
  68. def J(*args, **kwargs):
  69.     """Wrapper around jsonify that sets the Content-Type of the response to
  70.    application/vnd.api+json.
  71.    """
  72.     response = jsonify(*args, **kwargs)
  73.     response.mimetype = 'application/vnd.api+json'
  74.     return response
  75.  
  76. @app.route('/api/users', methods=['POST'])
  77. def new_user():
  78.     schema = RegistrationSchema()
  79.     input_data = request.get_json() or {}
  80.     data, errs = schema.load(input_data)
  81.     if errs:
  82.         return J(errs), 422
  83.     db.session.add(data)
  84.     db.session.commit()
  85.     return J(data)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement