40 lines
		
	
	
		
			No EOL
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			40 lines
		
	
	
		
			No EOL
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
from models.UserProfile.user_profile import UserProfile
 | 
						|
from werkzeug.security import generate_password_hash, check_password_hash
 | 
						|
from models import db
 | 
						|
from sqlalchemy import event
 | 
						|
 | 
						|
class User(db.Model):
 | 
						|
    __tablename__ = 'users'
 | 
						|
    
 | 
						|
    id = db.Column(db.Integer, primary_key=True)
 | 
						|
    username = db.Column(db.String(80), unique=True, nullable=False)
 | 
						|
    email = db.Column(db.String(120), unique=True, nullable=False)  # Add email field
 | 
						|
    _password = db.Column("password", db.String(255), nullable=False)    
 | 
						|
    
 | 
						|
    profile = db.relationship('UserProfile', back_populates='user', uselist=False, cascade="all, delete-orphan")
 | 
						|
        
 | 
						|
    @property
 | 
						|
    def password(self):
 | 
						|
        return self._password
 | 
						|
 | 
						|
    @password.setter
 | 
						|
    def password(self, raw_password):
 | 
						|
        if not raw_password.startswith("pbkdf2:sha256:"):
 | 
						|
            self._password = generate_password_hash(raw_password)
 | 
						|
        else:
 | 
						|
            self._password = raw_password
 | 
						|
 | 
						|
    def check_password(self, password):
 | 
						|
        return check_password_hash(self._password, password)
 | 
						|
    
 | 
						|
@event.listens_for(User, 'after_insert')
 | 
						|
def create_user_profile(mapper, connection, target):
 | 
						|
    connection.execute(
 | 
						|
        UserProfile.__table__.insert().values(
 | 
						|
            user_id=target.id,
 | 
						|
            first_name="",
 | 
						|
            last_name="",
 | 
						|
            bio="",
 | 
						|
            profile_picture=""
 | 
						|
        )
 | 
						|
    ) |