class User(db.Model, UserMixin): id = db.Column(db.Integer, primary_key=True) username = db.Column(db.String(20), unique=True, nullable=False) email = db.Column(db.String(120), unique=True, nullable=False) password = db.Column(db.String(60), nullable=False) todo = db.relationship('Todo', backref='current_user') def __repr__(self): return f'User_name: {self.username} Email: {self.email}'
class User(db.Model): __tablename__ = 'users' id = db.Column(db.Integer, primary_key=True) username = db.Column(db.String(20), nullable=False) email = db.Column(db.String(120), nullable=False) password = db.Column(db.String(60), nullable=False) profile_image_key = db.Column(db.String(120), nullable=True) profile_back_image_key = db.Column(db.String(120), nullable=True)
class Todo(db.Model): __tablename__ = 'todos' id = db.Column(db.Integer, primary_key=True, autoincrement=True) title = db.Column(db.String(255), nullable=False) content = db.Column(db.String(255), nullable=False) post_image_key = db.Column(db.String(255), nullable=False) date_posted = db.Column(db.DateTime, nullable=False, default=datetime.utcnow()) user_id = db.Column(db.Integer, nullable=False)
class Todo(db.Model): id = db.Column(db.Integer, primary_key=True) text = db.Column(db.String(200)) complete = db.Column(db.Boolean) user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False) def __repr__(self): return f'todo_id :{self.id} user_id :{self.user_id}'
class TaskModel(db.Model): __tablename__ = 'tasks' id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(30), nullable=False) note = db.Column(db.String(80)) creation_date = db.Column(db.DateTime, nullable=False, default=datetime.now) due_date = db.Column(db.DateTime) completed = db.Column(db.Boolean, default=False) user_id = db.Column(db.Integer, db.ForeignKey('users.id'), nullable=False) def to_dict(self): return { 'id': self.id, 'name': self.name, 'note': self.note, 'creation_date': self.creation_date.strftime(DATE_FMT), 'due_date': self.due_date.strftime(DATE_FMT) if self.due_date else None, 'completed': self.completed, } def save_to_db(self): db.session.add(self) db.session.commit() def delete_from_db(self): db.session.delete(self) db.session.commit() @classmethod def find_by_id(cls, task_id): return cls.query.filter_by(id=task_id).first() def __repr__(self): return f"<Task: {self.name}>"
class UserModel(db.Model): __tablename__ = 'users' id = db.Column(db.Integer, primary_key=True) username = db.Column(db.String(60), nullable=False, unique=True) email = db.Column(db.String(60), nullable=False) password_hash = db.Column(db.String(60), nullable=False) date_joined = db.Column(db.DateTime, nullable=False) tasks = db.relationship("TaskModel", backref='user', cascade="all", lazy='dynamic') def __init__(self, username, email, password): self.username = username self.email = email self.password = password self.date_joined = datetime.now() @property def password(self): """ Prevent password from being accessed. """ raise AttributeError('Password is not a readable attribute.') @password.setter def password(self, password): self.password_hash = bcrypt.generate_password_hash(password).decode('utf-8') def verify_password(self, password): return bcrypt.check_password_hash(self.password_hash, password) def to_dict(self): """Get the object's properties as a dictionary.""" return { "username": self.username, "email": self.email, "date_joined": self.date_joined.strftime(DATE_FMT), "tasks": [task.to_dict() for task in self.tasks.all()], } def save_to_db(self): db.session.add(self) db.session.commit() def delete_from_db(self): db.session.delete(self) db.session.commit() @classmethod def find_by_username(cls, username): return cls.query.filter_by(username=username).first() @classmethod def find_by_id(cls, user_id): return cls.query.filter_by(id=user_id).first() @classmethod def return_all(cls): def to_dict(user): return { 'username': user.username, 'email': user.email, } return {'users': list(map(lambda x: to_dict(x), cls.query.all()))} def __repr__(self): return f"<User: {self.username}>"