def add_to_cart(id, amount): cart, _ = prepare() # Если требуемое количество неположительно, то выдать ошибку 404 if amount <= 0: abort(404) # Выполнить поиск требуемого блюда в БД meal = db.session.query(Meal).get_or_404(id) # Добавить блюдо в корзину cart.append( dict( id=meal.id, title=meal.title, price=meal.price, amount=amount ) ) # Записать результат в сессию session['cart'] = cart # Переход на предыдущую страницу return redirect(request.referrer or url_for('main.index'))
def render_account(): _, kwargs = prepare() # Получить число заказов на странице per_page = current_app.config['ORDERS_PER_PAGE'] or 1 # Получить число заказов на странице page = request.args.get(get_page_parameter(), type=int, default=1) offset = (page - 1) * per_page # Выбрать все заказы для текущего пользователя orders = db.session.query(Order).filter( Order.user_id == current_user.id ).order_by(Order.date.desc()).all() kwargs['orders'] = orders[offset:offset + per_page] # Создать пажинатор pagination = Pagination( page=page, total=len(orders), per_page=per_page, offset=offset, record_name='orders', bs_version=4 ) kwargs['pagination'] = pagination return render_template('account.html', **kwargs)
def index(): _, kwargs = prepare() # Построить словарь с разделением по категориям categorized = OrderedDict() categories = db.session.query(Category).order_by(Category.title).all() for category in categories: # Запросить 3 рандомных блюда по данной категории # и отсортировать их по имени meals = sorted( db.session.query(Meal).filter( Meal.category == category ).order_by(func.random()).limit(3), key=lambda item: item.title ) # Добавить список выбранных блюд в словарь. categorized[ CategoryKey( id=category.id, title=category.title ) ] = meals kwargs['categorized'] = categorized return render_template('main.html', **kwargs)
def render_category(id): _, kwargs = prepare() # Получить категорию по индексу kwargs['category'] = db.session.query(Category).get_or_404(id) # Получить отсортированный список блюд данной категории kwargs['meals'] = db.session.query(Meal).filter( Meal.category_id == id ).order_by(Meal.title) return render_template('category.html', **kwargs)
def remove_from_cart(position): cart, _ = prepare() if position <= 0 or position > len(cart): abort(404) del cart[position - 1] session['cart'] = cart flash("Блюдо удалено из корзины", 'warning') return redirect(url_for('main.render_cart'))
def register(): _, kwargs = prepare() # Создать форму для регистрации form = RegistrationForm() if form.validate_on_submit(): # Создать нового пользователя # noinspection PyArgumentList user = User(email=form.email.data) user.password = form.password.data db.session.add(user) db.session.commit() flash("Спасибо за регистрацию", 'info') return redirect(url_for('auth.login')) kwargs['form'] = form return render_template('register.html', **kwargs)
def login(): _, kwargs = prepare() # Создать форму для входа form = LoginForm() if form.validate_on_submit(): # Найти пользователя с заданной электронной почтой user = db.session.query(User).filter( User.email == form.email.data ).first() # Если пользователь найден и проверен пароль, выполнить вход if user is not None and user.verify_password(form.password.data): login_user(user) # Получить адрес страницы для перехода next_url = session.get('next_url', url_for('main.index')) return redirect(request.args.get('next') or next_url) flash("Неверные электропочта или пароль", 'error') kwargs['form'] = form return render_template('login.html', **kwargs)
def render_error(message, code): _, kwargs = prepare() kwargs['message'] = message return render_template('error.html', **kwargs), code
def render_cart(): cart, kwargs = prepare() form = OrderForm() kwargs['form'] = form if form.validate_on_submit(): # Создать объект заказа order = Order( date=datetime.now(), total=float(form.order_total.data), name=form.name.data, address=form.address.data, email=form.email.data, phone=form.phone.data, user=current_user, ) db.session.add(order) # Получить данные корзины из формы form_cart = json.loads( zlib.decompress( base64.b64decode( form.order_cart.data.encode('utf-8') ) ).decode('utf-8') ) if not form_cart: db.session.rollback() abort(404) # Выбрать сведения о блюдах из базы данных meals = db.session.query(Meal).filter( Meal.id.in_(set(item[0] for item in form_cart)) ).all() # Создать записи о позициях заказа for item in form_cart: meal = next( (m for m in meals if m.id == item[0]), None ) if not meal: db.session.rollback() abort(404) position = OrderPosition( order=order, meal=meal, amount=item[1] ) db.session.add(position) db.session.commit() session['cart'] = [] return redirect(url_for('main.render_ordered')) return render_template('cart.html', **kwargs)