Beispiel #1
0
class Content(db_lib.Model):
    """
    Таблица Content - основные сведения об источнике.
    """

    __tablename__ = 'Content'

    id = db_lib.Column(db_lib.Integer, primary_key=True)
    name = db_lib.Column(db_lib.String(200), nullable=False)
    url = db_lib.Column(db_lib.String(300), nullable=False, unique=True)
    date = db_lib.Column(db_lib.DateTime, nullable=False, default=datetime.now)
    lang = db_lib.Column(db_lib.String(10), nullable=False)
    img_url = db_lib.Column(db_lib.String(200), nullable=True)

    category_id = db_lib.Column(db_lib.Integer(),
                                db_lib.ForeignKey('Category.id'))
    types_id = db_lib.Column(db_lib.Integer(), db_lib.ForeignKey('Types.id'))

    user_id = relationship('User',
                           secondary=subscribes_table,
                           lazy='dynamic',
                           cascade="all, delete",
                           backref='contents')

    manager = ContentManager()

    def __repr__(self):
        return f'<Content(name="{self.name}", url="{self.url}",' \
               f' date="{self.date}", lang="{self.lang}")>'

    def __str__(self):
        return self.name
Beispiel #2
0
class Types(db_lib.Model):
    """
    Таблица Types - тип источника (сайт, видео, игра и т.д.).
    Один ко многим.
    """

    __tablename__ = 'Types'

    id = db_lib.Column(db_lib.Integer, primary_key=True)
    name = db_lib.Column(db_lib.String(200), nullable=False, unique=True)
    fname = db_lib.Column(db_lib.String(100), nullable=True, unique=True)

    content = relationship('Content', backref='Types', lazy='dynamic')

    manager = TypesManager()

    def __repr__(self):
        return f'<Types(id="{self.id}", name="{self.name}")>'

    def __str__(self):
        return self.name
Beispiel #3
0
class Category(db_lib.Model):
    """
    Таблица Category - содержательная характеристика (python, sql и т.п.).
    Один ко многим.
    """

    __tablename__ = 'Category'

    id = db_lib.Column(db_lib.Integer, primary_key=True)
    name = db_lib.Column(db_lib.String(100), nullable=False, unique=True)
    fname = db_lib.Column(db_lib.String(100), nullable=True, unique=True)

    content = relationship('Content', backref='Category', lazy='dynamic')

    manager = CategoryManager()

    def __repr__(self):
        return f'<Types(id="{self.id}", name="{self.name}")>'

    def __str__(self):
        return self.name
Beispiel #4
0
class User(UserMixin, db_lib.Model):
    """
    Таблица User - информация о зарегистрированных пользователях.
    """

    __tablename__ = 'User'

    id = db_lib.Column(db_lib.Integer, primary_key=True)
    social_id = db_lib.Column(db_lib.String(64), nullable=True, unique=True)
    nickname = db_lib.Column(db_lib.String(64), nullable=False, unique=True)
    password_hash = db_lib.Column(db_lib.String(128), nullable=True)
    isadmin = db_lib.Column(db_lib.Boolean, default=False)
    active = db_lib.Column(db_lib.Boolean, default=True)

    content_id = relationship('Content',
                              secondary=subscribes_table,
                              cascade="all, delete",
                              lazy='dynamic',
                              backref='users')

    manager = UserManager()

    def set_password(self, password: str) -> None:
        """
        Создание хеш-слепка пароля.
        """
        self.password_hash = generate_password_hash(password)

    def check_password(self, password: str) -> bool:
        """
        Проверка соответствия хэш-слепка пароля введённому паролю.
        """
        return check_password_hash(self.password_hash, password)

    def __repr__(self):
        return f'<User: nickname={self.nickname}, isadmin={self.isadmin}>'

    def __str__(self):
        return self.nickname
Beispiel #5
0
"""
import logging
from datetime import datetime

from flask_login import UserMixin
from requests import get
from sqlalchemy import event, UniqueConstraint
from sqlalchemy.orm import relationship
from werkzeug.security import check_password_hash, generate_password_hash

from app import application, db_lib
from app import login_manager

subscribes_table = db_lib.Table(
    'Subscribes', db_lib.metadata,
    db_lib.Column('user_id', db_lib.Integer, db_lib.ForeignKey('User.id')),
    db_lib.Column('content_id', db_lib.Integer,
                  db_lib.ForeignKey('Content.id')),
    UniqueConstraint('user_id', 'content_id'))


class UserManager:
    def create(self, *, nick: str, passd: str):
        """
        Создаёт нового пользователя. Возвращает объект пользователя.
        """

        user = User(nickname=nick)
        user.set_password(passd)
        db_lib.session.add(user)
        db_lib.session.commit()