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)
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)
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)
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)
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)
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)
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)
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)
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']))
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)
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),