/
sofnuk2004
/
server1
Обзор
Документация
Войти
/
sofnuk2004
/
server1
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
app/db_models.py
142 строки
6 KB
Sofya Nikolaeva
убираю лишний config
03 мар 2026, 18:36
03 мар 2026, 18:36
fc7a7bb
Код
Авторство
О чём код?
from datetime import datetime from werkzeug.security import generate_password_hash, check_password_hash from app import db class User(db.Model): __tablename__ = 'users' id = db.Column(db.Integer, primary_key=True) username = db.Column(db.String(64), unique=True, nullable=False, index=True) email = db.Column(db.String(120), unique=True, nullable=False, index=True) password_hash = db.Column(db.String(256), nullable=False) role = db.Column(db.String(20), nullable=False, default='patient') first_name = db.Column(db.String(64)) last_name = db.Column(db.String(64)) is_active = db.Column(db.Boolean, default=True) created_at = db.Column(db.DateTime, default=datetime.utcnow) last_seen = db.Column(db.DateTime, default=datetime.utcnow) # Связи patient_profile = db.relationship('Patient', backref='user', uselist=False, cascade='all, delete-orphan') doctor_profile = db.relationship('Doctor', backref='user', uselist=False, cascade='all, delete-orphan') def set_password(self, password): self.password_hash = generate_password_hash(password) def check_password(self, password): return check_password_hash(self.password_hash, password) def is_admin(self): return self.role == 'admin' def is_doctor(self): return self.role == 'doctor' def is_patient(self): return self.role == 'patient' def __repr__(self): return f'<User {self.username}>' class Patient(db.Model): __tablename__ = 'patients' id = db.Column(db.Integer, primary_key=True) user_id = db.Column(db.Integer, db.ForeignKey('users.id'), nullable=False, unique=True) date_of_birth = db.Column(db.Date) phone = db.Column(db.String(20)) address = db.Column(db.String(200)) medical_history = db.Column(db.Text) # Связи images = db.relationship('Image', backref='patient', lazy='dynamic', cascade='all, delete-orphan') diagnoses = db.relationship('Diagnosis', backref='patient', lazy='dynamic', cascade='all, delete-orphan') class Doctor(db.Model): __tablename__ = 'doctors' id = db.Column(db.Integer, primary_key=True) user_id = db.Column(db.Integer, db.ForeignKey('users.id'), nullable=False, unique=True) specialization = db.Column(db.String(100)) license_number = db.Column(db.String(50)) phone = db.Column(db.String(20)) # Связи diagnoses = db.relationship('Diagnosis', backref='doctor', lazy='dynamic') reviewed_images = db.relationship('Image', backref='reviewer', lazy='dynamic') class Image(db.Model): __tablename__ = 'images' id = db.Column(db.Integer, primary_key=True) filename = db.Column(db.String(255), nullable=False) original_filename = db.Column(db.String(255), nullable=False) file_path = db.Column(db.String(500), nullable=False) upload_date = db.Column(db.DateTime, default=datetime.utcnow) patient_id = db.Column(db.Integer, db.ForeignKey('patients.id'), nullable=False) # Метаданные body_part = db.Column(db.String(100)) notes = db.Column(db.Text) # Статус status = db.Column(db.String(20), default='uploaded') # uploaded, processed, reviewed reviewed_by = db.Column(db.Integer, db.ForeignKey('doctors.id')) reviewed_at = db.Column(db.DateTime) # Связи diagnoses = db.relationship('Diagnosis', backref='image', lazy='dynamic', cascade='all, delete-orphan') class Diagnosis(db.Model): __tablename__ = 'diagnoses' id = db.Column(db.Integer, primary_key=True) image_id = db.Column(db.Integer, db.ForeignKey('images.id'), nullable=False) patient_id = db.Column(db.Integer, db.ForeignKey('patients.id'), nullable=False) doctor_id = db.Column(db.Integer, db.ForeignKey('doctors.id')) # Результаты модели model_name = db.Column(db.String(100), nullable=False) model_version = db.Column(db.String(20)) prediction = db.Column(db.String(50)) # malignant/benign или конкретный диагноз confidence = db.Column(db.Float) # уверенность модели (0-1) # Для визуализации (heatmap) heatmap_path = db.Column(db.String(500)) # путь к изображению с подсветкой # Детальный вывод модели detailed_results = db.Column(db.JSON) # все вероятности по классам # Метаданные created_at = db.Column(db.DateTime, default=datetime.utcnow) is_final = db.Column(db.Boolean, default=False) # окончательный ли диагноз # Комментарий врача doctor_notes = db.Column(db.Text) def __repr__(self): return f'<Diagnosis {self.id}: {self.prediction} ({self.confidence:.2f})>' class ModelInfo(db.Model): __tablename__ = 'model_info' id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(100), nullable=False, unique=True) display_name = db.Column(db.String(100)) version = db.Column(db.String(20)) description = db.Column(db.Text) file_path = db.Column(db.String(500), nullable=False) class_names_path = db.Column(db.String(500)) is_active = db.Column(db.Boolean, default=True) created_at = db.Column(db.DateTime, default=datetime.utcnow) accuracy = db.Column(db.Float) precision = db.Column(db.Float) recall = db.Column(db.Float) f1_score = db.Column(db.Float) # Для версионирования parent_model_id = db.Column(db.Integer, db.ForeignKey('model_info.id')) training_data_version = db.Column(db.String(50)) def __repr__(self): return f'<Model {self.name} v{self.version}>'