flaskblog / project /models.py
ashmeet007's picture
Deploying without binary files
66b1e34
from project import db, login_manager
from datetime import datetime
from itsdangerous import URLSafeTimedSerializer
from flask_login import UserMixin
from flask import current_app
@login_manager.user_loader
def load_user(user_id):
return db.session.get(User, int(user_id))
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)
image_file = db.Column(db.String(20), nullable=False, default='ae33c584ff50ba15.png')
password = db.Column(db.String(60), nullable=False)
posts = db.relationship('Post', backref='author', lazy=True)
def get_reset_token(self):
s = URLSafeTimedSerializer(current_app.config['SECRET_KEY'])
return s.dumps({'user_id': self.id}, salt='password-reset')
@staticmethod
def verify_reset_token(token, expires_sec=1800):
s = URLSafeTimedSerializer(current_app.config['SECRET_KEY'])
try:
data = s.loads(
token,
salt='password-reset',
max_age=expires_sec
)
except Exception:
return None
return db.session.get(User, data['user_id'])
def __repr__(self):
return f"User('{self.username}', '{self.email}', '{self.image_file}')"
class Post(db.Model):
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(100), nullable=False)
content = db.Column(db.String(500), nullable=False)
date_posted = db.Column(db.DateTime, nullable=False, default=datetime.utcnow)
user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)
def __repr__(self):
return f"Post('{self.title}', '{self.date_posted}')"