Esempio n. 1
0
def author_page(author_id):
    """ Вывод информации о писателе """
    # проверка, авторизован ли пользователь
    if 'username' not in session:
        loged = False
    else:
        loged = True
    # ошибка, если такого автора нет в базе
    if not AuthorsModel(db.get_connection()).exists_id(str(author_id)):
        return render_template('error.html', loged=loged, title='Ошибка')
    books = BooksModel(db.get_connection())
    book = []
    author = AuthorsModel(db.get_connection()).get(author_id)
    books_author = author[4].split('//')
    for item in books_author:
        book.append(books.get_by_name(str(item)))
    # для авторизованного пользователя показывается список книг автора
    # для не авторизованного пользователя показывается только страница автора
    # страница для администратора
    if UsersModel(db.get_connection()).is_admin(session['username']):
        return render_template('author_info.html',
                               title=author[1],
                               loged=loged,
                               author=author,
                               book=book,
                               admin=True)
    return render_template('author_info.html',
                           title=author[1],
                           loged=loged,
                           author=author,
                           book=book,
                           admin=False)
Esempio n. 2
0
def add_author():
    """ Добавление автора """
    # Ошибка, если пользователь не администратор или не зарегистрирован
    if 'username' not in session:
        return render_template('error.html', loged=False, title='Ошибка')
    if not UsersModel(db.get_connection()).is_admin(session['username']):
        return render_template('error.html', loged=False, title='Ошибка')
    books = BooksModel(db.get_connection()).get_all()
    form = AddAuthorForm()
    if form.validate_on_submit():
        # создать автора
        authors = AuthorsModel(db.get_connection())
        book_list = ''
        for item in books:
            if item[2] == form.name.data:
                book_list += item[1] + '//'
        book_list.rstrip('//')
        if form.picture.data is not None:
            filename = secure_filename(form.picture.data.filename)
            server_file = 'static/img/' + filename
            form.pictures.data.save(server_file)
        authors.insert(name=form.name.data,
                       picture=filename,
                       bio=form.bio.data,
                       books=book_list)
        # редирект на главную страницу
        return redirect('index')
    return render_template("add_author.html",
                           title='Добавить автора',
                           form=form,
                           loged=True)
Esempio n. 3
0
def index():
    """ Главная страница """
    # загружаем списки книг и авторов
    books = BooksModel(db.get_connection()).get_all()
    authors = AuthorsModel(db.get_connection()).get_all()
    # страница для навторизованного пользователя
    if 'username' not in session:
        return render_template('main_page.html',
                               books=books,
                               title="MyBookShelf",
                               loged=False,
                               admin=False,
                               authors=authors)
    # страница для администратора
    if UsersModel(db.get_connection()).is_admin(session['username']):
        return render_template('main_page.html',
                               books=books,
                               title="MyBookShelf",
                               loged=True,
                               username=session['username'],
                               admin=True,
                               authors=authors)
    # страница для авторизованного пользователя
    return render_template('main_page.html',
                           books=books,
                           title="MyBookShelf",
                           loged=True,
                           username=session['username'],
                           authors=authors,
                           admin=False)
Esempio n. 4
0
def books_page():
    """ Страница со всеми книгами """
    books = BooksModel(db.get_connection()).get_all()
    authors = AuthorsModel(db.get_connection()).get_all()
    # страница для не авторизованного пользователя
    if 'username' not in session:
        return render_template('books_page.html',
                               books=books,
                               title="Книги",
                               loged=False,
                               admin=False,
                               authors=authors)
    # страница для администратора
    if UsersModel(db.get_connection()).is_admin(session['username']):
        return render_template('books_page.html',
                               books=books,
                               title="Книги",
                               loged=True,
                               username=session['username'],
                               admin=True,
                               authors=authors)
    # страница для авторизованного пользователя
    return render_template('books_page.html',
                           books=books,
                           title="Книги",
                           loged=True,
                           username=session['username'],
                           authors=authors)
Esempio n. 5
0
def edit_author_page(author_id):
    """ Редактирование информации о писателе """
    # проверка, авторизован ли пользователь
    if 'username' not in session:
        loged = False
    else:
        loged = True
    # ошибка, если такого автора нет в базе
    if not AuthorsModel(db.get_connection()).exists_id(str(author_id)):
        return render_template('error.html', loged=loged, title='Ошибка')
    books = BooksModel(db.get_connection())
    book = []
    author = AuthorsModel(db.get_connection()).get(author_id)
    books_author = author[4].split('//')
    for item in books_author:
        book.append(books.get_by_name(str(item)))
    if UsersModel(db.get_connection()).is_admin(session['username']):
        form = EditAuthorForm()
        if form.validate_on_submit():
            if form.bio.data:
                AuthorsModel(db.get_connection()).edit_bio(
                    author_id, form.bio.data)
            if form.picture.data is not None:
                filename = secure_filename(form.picture.data.filename)
                server_file = 'static/img/' + filename
                form.picture.data.save(server_file)
                AuthorsModel(db.get_connection()).edit_picture(
                    author_id, filename)
            return redirect('author/' + str(author_id))

        return render_template('edit_author.html',
                               title='Редактирование',
                               loged=loged,
                               admin=True,
                               form=form)

    return render_template('author_info.html',
                           title=author[1],
                           loged=loged,
                           author=author,
                           book=book,
                           admin=False)
Esempio n. 6
0
def add_book():
    """ Добавление книги """
    # Ошибка, если пользователь не администратор или не зарегистрирован
    if 'username' not in session:
        return render_template('error.html', loged=False, title='Ошибка')
    if not UsersModel(db.get_connection()).is_admin(session['username']):
        return render_template('error.html', loged=False, title='Ошибка')
    form = AddBookForm()
    if form.validate_on_submit():
        # создать книгу
        books = BooksModel(db.get_connection())
        f = None
        all_books = BooksModel(db.get_connection()).get_all()
        for i in range(len(all_books)):
            if all_books[i][2] == form.author.data:
                f = all_books[i][0]
        if f:
            # добавить книгу в список произведений автора
            author = AuthorsModel(db.get_connection()).get_by_name(
                form.author.data)
            book_list = author[4] + '//' + form.name.data
            AuthorsModel(db.get_connection()).add_book(book_list, author[0])
        if form.pictures.data is not None:
            filename = secure_filename(form.pictures.data.filename)
            server_file = 'static/img/' + filename
            form.pictures.data.save(server_file)
        books.insert(name=form.name.data,
                     author=form.author.data,
                     year=form.year.data,
                     pages=form.pages.data,
                     pictures=filename,
                     bio=form.bio.data,
                     stock=form.stock.data,
                     price=form.price.data)
        # редирект на главную страницу
        return redirect('index')
    return render_template("add_book.html",
                           title='Добавить книгу',
                           form=form,
                           loged=True)
Esempio n. 7
0
def search():
    """ Поиск писателей и произведений по сайту """
    if 'username' not in session:
        loged = False
    else:
        loged = True
    form = SearchForm()
    if form.validate_on_submit():
        exists = BooksModel(db.get_connection()).exists(form.search.data)
        # результат, если есть книга с таким названием
        if exists[0]:
            result = BooksModel(db.get_connection()).get(exists[1])
            return render_template("search.html",
                                   title='Поиск',
                                   form=form,
                                   loged=loged,
                                   result=(result, 1))
        exists = AuthorsModel(db.get_connection()).exists(form.search.data)
        # результат, если есть автор с таким именем
        if exists:
            result = AuthorsModel(db.get_connection()).get(exists)
            return render_template("search.html",
                                   title='Поиск',
                                   form=form,
                                   loged=loged,
                                   result=(result, 2))
        # результат, если по запросу ничего не найдено
        return render_template("search.html",
                               title='Поиск',
                               form=form,
                               loged=loged,
                               result='error')
    return render_template("search.html",
                           title='Поиск',
                           form=form,
                           loged=loged,
                           result=False)
Esempio n. 8
0
def book(book_id, alert=0):
    """ Вывод информации о книге """
    if 'username' not in session:
        loged = False
    else:
        loged = True
    # ошибка, если такой книги нет в базе
    if not BooksModel(db.get_connection()).exists_id(book_id):
        return render_template('error.html', loged=loged, title='Ошибка')
    book = BooksModel(db.get_connection()).get(book_id)
    # вывод комментариев для авторизованного пользователя
    if loged:
        all_comments = []
        comments = Comment.query.filter_by(book_id=book_id).all()
        for comment in comments:
            all_comments.append(str(comment).strip('<> ').split(' !! '))
        author = AuthorsModel(db.get_connection()).exists(book[2])
        return render_template('book_info.html',
                               username=session['username'],
                               title=book[1],
                               loged=loged,
                               book=book,
                               alert=alert,
                               author=author,
                               comments=all_comments,
                               admin=UsersModel(db.get_connection()).is_admin(
                                   session['username']))
    # вывод без возможности просматривать комменатрии для не авторизованного пользователя
    author = AuthorsModel(db.get_connection()).exists(book[2])
    return render_template('book_info.html',
                           title=book[1],
                           loged=loged,
                           book=book,
                           alert=alert,
                           admin=False,
                           author=author)
Esempio n. 9
0
def buy_book(book_id):
    """ Добавление книги в корзину через интерфейс страницы книги """
    # если пользователь не авторизован, кидаем его на страницу входа
    if 'username' not in session:
        return redirect('login')
    user = UsersModel(db.get_connection()).get_by_name(session['username'])
    book = BooksModel(db.get_connection()).get(book_id)
    # изменение БД
    if user[5]:
        books = user[5] + '//' + str(book_id)
    else:
        books = str(book_id)
    num = 0
    for item in books.split('//'):
        if int(item) == book_id:
            num += 1
    all_comments = []
    comments = Comment.query.filter_by(book_id=book_id).all()
    for comment in comments:
        all_comments.append(str(comment).strip('<> ').split(' !! '))
    author = AuthorsModel(db.get_connection()).exists(book[2])
    # добавление книги в корзину, если она есть на складе
    if book[7] - num >= 0:
        UsersModel(db.get_connection()).add_book(user[0], books)
        return render_template('book_info.html',
                               username=session['username'],
                               title=book[1],
                               loged=True,
                               book=book,
                               alert=1,
                               author=author,
                               comments=all_comments,
                               admin=UsersModel(db.get_connection()).is_admin(
                                   session['username']))
    # вывод сообщения, если книги нет на складе
    else:
        return render_template('book_info.html',
                               username=session['username'],
                               title=book[1],
                               loged=True,
                               book=book,
                               alert=2,
                               author=author,
                               comments=all_comments,
                               admin=UsersModel(db.get_connection()).is_admin(
                                   session['username']))
Esempio n. 10
0
def books_page_name():
    """ Сортировка по названию"""
    books = BooksModel(db.get_connection()).get_all()
    authors = AuthorsModel(db.get_connection()).get_all()
    books = sorted(books, key=lambda x: x[1])
    b = []
    p = 0
    for i in books:
        p += 1
        b.append((i[0], i[1], i[2], i[3], i[4], i[5], i[6], i[7], i[8], p))
    # страница для не авторизованного пользователя
    if 'username' not in session:
        return render_template('books_page.html',
                               books=b,
                               title="Книги",
                               loged=False,
                               admin=False,
                               authors=authors,
                               k=True)
    # страница для администратора
    if UsersModel(db.get_connection()).is_admin(session['username']):
        return render_template('books_page.html',
                               books=b,
                               title="Книги",
                               loged=True,
                               username=session['username'],
                               admin=True,
                               authors=authors,
                               k=True)
    # страница для авторизованного пользователя
    return render_template('books_page.html',
                           books=books,
                           title="Книги",
                           loged=True,
                           username=session['username'],
                           authors=authors)
Esempio n. 11
0
from models import UsersModel, BooksModel, AuthorsModel
from flask_sqlalchemy import SQLAlchemy
from db import DB
import os

app = Flask(__name__)
app.config['SECRET_KEY'] = 'yandexlyceum_secret_key'
db = DB()

app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///comments.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db_comments = SQLAlchemy(app)

UsersModel(db.get_connection()).init_table()
BooksModel(db.get_connection()).init_table()
AuthorsModel(db.get_connection()).init_table()


class Comment(db_comments.Model):
    """сущность комментариев"""
    id = db_comments.Column(db_comments.Integer, primary_key=True)
    book_id = db_comments.Column(db_comments.Integer,
                                 unique=False,
                                 nullable=False)
    book_id = db_comments.Column(db_comments.Integer,
                                 unique=False,
                                 nullable=False)
    book_name = db_comments.Column(db_comments.String(80),
                                   unique=False,
                                   nullable=False)
    username = db_comments.Column(db_comments.String(80),