Не работает поиск товаров на моем сайте Python Flask HTML

Когда вводишь название товара в строку поиска, товары показываются, но пропадает их количество в корзине, и потом не возможно вернуться на основную страницу товаров, приходится нажимать кнопку найти в строке поиска, когда строка пуста.

Вот кот из main.py:

from flask import Flask, render_template, request, url_for, redirect, jsonify
from flask_login import LoginManager, UserMixin, login_user, login_required, logout_user
from datetime import datetime, timedelta
from random import randint, choice
import re
from kodland_db import db
import bcrypt

app = Flask(__name__)
all_orders = []
poisk = ''
zakaz = 0
korzina = 0
item_id = 0

app.config.update(
    SECRET_KEY = 'WOW SUCH SECRET'
)

login_manager = LoginManager()
login_manager.init_app(app)
login_manager.login_view = "login"

def hashed_password(plain_text_password):
    return bcrypt.hashpw(plain_text_password.encode('utf-8'), bcrypt.gensalt())

def check_password(plain_text_password, hashed_password):
    return bcrypt.checkpw(plain_text_password.encode('utf-8'), hashed_password)

class User(UserMixin):
    def __init__(self, id):
        self.id = id
        
@login_manager.user_loader
def load_user(login):
    return User(login)    




@app.route('/')
@login_required
def index():
    global rek
    rek = []
    a = []
    b = 0    
    data = db.items.get_all()
    for i in range(2):
        while True:
            b = randint(1, len(data))
            res = db.items.get('id', b)
            a = [res.name, res.image, res.link]
            if a in rek:
                pass
            else:            
                rek.append(a)
                break
    
    return render_template('index.html', rek=rek)




@app.route('/products/', methods=['GET', 'POST'])
@login_required
def products():
    global poisk
    global korzina
    korzina = []
    if request.method == 'POST' and 'poisk' in request.form:       
        data = db.items.get_all()
        poisk = request.form['poisk']
        return render_template('products.html', data=data, korzina=korzina, poisk=poisk)   
        
    if request.method == 'POST' and 'item_id' in request.form:    
        item_id = request.form['item_id']
        row = db.cart.get('item_id', item_id)
        if not row:
            data = {'item_id':item_id, 'amount':1}
            db.cart.put(data)
        else:
            data = {'item_id':item_id, 'amount':row.amount+1}
            db.cart.delete('item_id', item_id)
            db.cart.put(data)
        data = db.items.get_all()
        for row1 in data:
            res = db.cart.get('item_id', row1.id)
            if res:
                row1.amount = res.amount
                korzina.append(str(row1.amount))
            else:
                row1.amount = 0
                korzina.append(str(row1.amount))        
        return render_template('products.html', data=data, korzina=korzina, poisk=poisk)    
    data = db.items.get_all()
    for row1 in data:
        res = db.cart.get('item_id', row1.id)
        if res:
            row1.amount = res.amount
            korzina.append(str(row1.amount))
        else:
            row1.amount = 0
            korzina.append(str(row1.amount))
            
    return render_template('products.html', data=data, korzina=korzina, poisk=poisk)



def tovar_html(id, ssilka):
    global korzina
    global item_id
    global link
    korzina = 0
    item_id = id
    if request.method == 'POST':
        row = db.cart.get('item_id', item_id)
        if not row:
            data = {'item_id':item_id, 'amount':1}
            db.cart.put(data)
        else:
            data = {'item_id':item_id, 'amount':row.amount+1}
            db.cart.delete('item_id', item_id)
            db.cart.put(data)
        res = db.cart.get('item_id', item_id)
        if res:
            korzina = (str(res.amount))
        else:
            korzina = 0    
        return redirect(url_for(ssilka))    
    res = db.cart.get('item_id', item_id)
    if res:
        korzina = (str(res.amount))
    else:
        korzina = 0
    
    row = db.items.get('id', item_id)
    link = row.link




@app.route('/cart/', methods=['GET', 'POST'])
@login_required
def cart():
    if request.method == 'POST':
        return redirect(url_for('order'))    
    data = db.cart.get_all()
    total_sum = 0
    for row in data:
        item_row = db.items.get('id', row.item_id)
        row.name = item_row.name
        row.description = item_row.description
        row.price = item_row.price
        row.total = row.amount * item_row.price
        total_sum += row.total
    return render_template('cart.html', data=data, total_sum=total_sum)




@app.route('/contacts/')
@login_required
def contacts():
    return render_template('contacts.html')




@app.route('/about/')
@login_required
def about():
    return render_template('about.html')




@app.route('/krujka/', methods=['GET', 'POST'])
@login_required
def krujka():
    item_id = 1
    ssilka = 'krujka'
    product = [{'name': 'Кружка', 
                    'description': 'Это лучшая кофейная кружка, которая продается у нас! Из нее вы можете пить кофе, и наслаждаться прекрасным дизайном, идеально подобраными цветами и узорами в стиле "кофе". Сейчас со скидкой 10%!', 
                    'price':'325 руб',
                    'img':'/static/images/krujka.jpg',
               }]
    tovar_html(item_id, ssilka)   
    return render_template('tovar.html', product = product, korzina=korzina, id=item_id, link=link)





@app.route('/fen/', methods=['GET', 'POST'])
@login_required
def fen():
    item_id = 4
    ssilka = 'fen'
    product = [{'name': 'Фен', 
                    'description': 'Этот фен разработан с применением новейших технологий! Со стильным дизайном, мощным потоком воздуха, с двумя режимами работы (теплый, холодный), обладает несколькими насадками для создания стильных и обьемных причесок. Гарантия вашего индивидуального образа. Поддерживает работу с кудрявыми волосами. Сейчас со скидкой 10%!', 
                    'price':'1445 руб',
                    'img':'/static/images/fen.webp'
               }]
    tovar_html(item_id, ssilka)
    return render_template('tovar.html', product = product, korzina=korzina, id=item_id, link=link)




@app.route('/tovar/', methods=['GET', 'POST'])
@login_required
def s_tovar():
    item_id = 2
    ssilka = 'tovar'
    product = [{'name': 'Супер крутой товар', 
                    'description': 'Это супер крутой товар, скорее покупай', 
                    'price':'50 руб',
                    'img':'/static/images/tikva.jpg'
               }]
    tovar_html(item_id, ssilka)
    return render_template('tovar.html', product = product, korzina=korzina, id=item_id, link=link)




@app.route('/camera/', methods=['GET', 'POST'])
@login_required
def camera():
    item_id = 3
    ssilka = 'camera'
    product = [{'name': 'Web камера', 
                    'description': 'Это лучшая камера для Вашего компьютера', 
                    'price':'345 руб',
                    'img':'/static/images/camera.webp'
               }]
    tovar_html(item_id, ssilka)
    return render_template('tovar.html', product = product, korzina=korzina, id=item_id, link=link)



@app.route('/printer/', methods=['GET', 'POST'])
@login_required
def printer():
    item_id = 5
    ssilka = 'printer'
    product = [{'name': 'Принтер', 
                    'description': 'Принтер для ПК для печати', 
                    'price':'4896 руб',
                    'img':'/static/images/printer.jpg'
               }]
    tovar_html(item_id, ssilka)
    return render_template('tovar.html', product = product, korzina=korzina, id=item_id, link=link)



@app.route('/scetka/', methods=['GET', 'POST'])
@login_required
def scetka():
    item_id = 6
    ssilka = 'scetka'
    product = [{'name': 'Зубная щетка', 
                    'description': 'Щетка для чистки зубов', 
                    'price':'94 руб',
                    'img':'/static/images/scetka.jpg'
               }]
    tovar_html(item_id, ssilka)
    return render_template('tovar.html', product = product, korzina=korzina, id=item_id, link=link)




@app.route('/order/', methods=['GET', 'POST'])
@login_required
def order():
    global zakaz
    if request.method == 'POST':
        for key in request.form:
            if request.form[key] == '':
                return render_template('order.html', error='Не все поля заполнены!')
            if key == 'email':
                if not re.match('\\w+@\\w+\\.(ru|com)', request.form[key]):
                    return render_template('order.html', error='Неправильный формат почты')
            if key == 'phone_number':
                if not re.match('\\+7\\d{9}', request.form[key]):
                    return render_template('order.html', error='Неправильный формат номера телефона')
        cart_data = db.cart.get_all()
        order_data = db.orders.get_all()
        
        id_ = order_data[-1].id + 1 if order_data else 1
        for row in cart_data:
            item = {'id': id_, 'item_id': row.item_id, 'amount': row.amount}
            db.orders.put(item)

        for row in cart_data:
            db.cart.delete('item_id', row.item_id)
        return redirect(url_for('order_list'))
        
        all_orders.append(request.form)
        zakaz += 1
        return render_template('order_list.html', zakaz = zakaz, **request.form)
    return render_template('order.html')
    
    
    
    
@app.route('/api/orders/')
def api_orders():
    return jsonify(all_orders)




@app.route('/order_list/')
@login_required
def order_list():
    return render_template('order_list.html')




@app.route('/login/', methods=['GET', 'POST'])
def login():
    if request.method == 'POST':
        row = db.users.get('login', request.form['login'])
        if not row:
            return render_template('login.html', error='Неправильный логин или пароль')
        if check_password(request.form['password'], row.password):
            user = User(login)  # Создаем пользователя
            login_user(user)  # Логинем пользователя
            return redirect(url_for('index'))
        else:
            return render_template('login.html', error='Неправильный логин или пароль')
    return render_template('login.html')




@app.route('/register/', methods=['GET', 'POST'])
def register():
    # Генератор пароля
    simvol = randint(10, 20)
    password_gen = ''
    for i in range(simvol):
        b = ['A', 'a', 'B', 'b', 'C', 'c', 'D', 'd', 'E', 'e', 'F', 'f' , 'G', 'g' ,
             'H' ,'h' ,'I' ,'i' ,'J' ,'j' ,'K' ,'k' , 'L', 'l', 'M', 'm', 'N', 'n',
             'O', 'o', 'P', 'p', 'Q', 'q', 'R', 'r', 'S', 's', 'T', 't', 'U', 'u',
             'V', 'v', 'W', 'w', 'X', 'x', 'Y', 'y', 'Z', 'z', '!', '?']
        c = randint(0, 9)
        dd = randint(0, 53)
        randoma = randint(1, 2)
        if randoma == 1:
            password_gen += b[dd]
        else:
            password_gen += str(c)
            
    if request.method == 'POST':
        for key in request.form:
            if request.form[key] == '':
                return render_template('register.html', message='Все поля должны быть заполнены!', password_gen = password_gen)
        if request.form['password'] != request.form['password_check']:
            return render_template('register.html', message='Пароли не совпадают', password_gen = password_gen)
        row = db.users.get('login', request.form['login'])
        if row:
            return render_template('register.html', message='Такой пользователь уже существует!', password_gen = password_gen)
        row = db.users.get('phone_number', request.form['phone_number'])
        if row:
            return render_template('register.html', message='Такой номер телефона уже был использован!', password_gen = password_gen)
        row = db.users.get('email', request.form['email'])
        if row:
            return render_template('register.html', message='Такая почта уже была использована!', password_gen = password_gen)
        
        data = dict(request.form)
        data.pop('password_check')
        data['password'] = hashed_password(str(request.form['password']))
        db.users.put(data=data)
        return render_template('register.html', message='Регистрация прошла успешно', password_gen = password_gen)
    
    return render_template('register.html', password_gen = password_gen)




@app.route("/logout/")
@login_required
def logout():
    logout_user()
    return redirect(url_for('login'))



if __name__ == "__main__":
    app.run()

Вот код из products.html:

{% extends 'index.html' %}
{% block head %}
    <link rel="stylesheet" href= "../static/css/products.css">
    <title>Товары</title>
{% endblock %}
{% block content %}
<form action="/products"  method='POST'>
  <input type="text" placeholder="Введите название товара" name='poisk'>
  <button type="submit">Найти!</button>
</form>  
<table>
  <tr>
    <th>Наименование</th>
    <th>Описание</th>
    <th>Цена</th>
    <th>Фото</th>
    <th></th>
  </tr>
 
{% if poisk == '' %}  
 {% for row in data %}
 <form action="/products"  method='POST'>
  <tr>
    <input type="hidden" value="{{row.id}}" name='item_id'>
    <td><a href="{{row.link}}">{{row.name}}</a></td>
    <td>{{row.description}}</td>
    <td>{{row.price}} руб</td>
    <td><img src="../static/images/{{row.image}}" width="90" height="90" /></td>
    <td><button type="submit">В корзину</button><br>В корзине: {{korzina[row.id - 1]}}</td>
  </tr>
  </form>
  {% endfor %}  
{% endif %}  

{% if poisk != '' %}  
 {% for row in data %}
   {% if poisk in row.name %} 
     <form action="/products"  method='POST'>
      <tr>
        <input type="hidden" value="{{row.id}}" name='item_id'>
        <td><a href="/product1">{{row.name}}</a></td>
        <td>{{row.description}}</td>
        <td>{{row.price}} руб</td>
        <td><img src="../static/images/{{row.image}}" width="90" height="90" /></td>
        <td><button type="submit">В корзину</button><br>В корзине: {{korzina[row.id - 1]}}</td>
      </tr>
     </form>
   {% endif %}    
 {% endfor %}  
{% endif %}  
 
</table>
<div class='footer_mnogo_contenta'>
    <span style="font-size: 15pt;">Тех.поддержка: <br>
    Почта: [email protected] <br>
    Telegram: +79529404135 <br>
    Номер телефона: +79537752212<span>
</div>
{% endblock %}

На предыдущем вопросе проблема решилась, но тут уже по сложнее.

Вот база данных товаров:

БД товаров

Вот база данных корзины:

БД корзины

Так же, есть проблемы с order.html. На этой странице оформляется заказ. После этого, заказ должен добавляться в список all_orders и показываться на странице api/orders. Но после оформления заказа, список остается пуст.

Код из order.html:

{% extends 'index.html' %}
{% block head %}
<link rel="stylesheet" href="/static/css/order.css">
{% endblock %}

{% block content %}
<form action='/order/' method='post'>
    {{error}}
    {{error1}}
    <ul class="form">
        
        <li>
            <input type="text" name="name" placeholder="Имя">
        </li>
        <li>
            <input type="text" name="fname" placeholder="Фамилия">
        </li>
        <li>
            <input type="text" name="adress" placeholder="Адрес">
        </li>
        <li>
            <input type="text" name="phone_number" placeholder="Номер Телефона">
        </li>
        <li>
            <input type="text" name="email" placeholder="email">
        </li>
        <li>
            <input type="datetime-local" name="date" placeholder="Дата доставки">
        </li>
        <li>
            <select name="delivery_type">
                <option value="Доставка на дом">Доставка на дом</option>
                <option value="Пункт самовывоза">Пункт самовывоза</option>
            </select>
        </li>
        <li>
            <input type="text" name="send" placeholder="Сообщение продавцу">
        </li>
        <li>
            <button type="submit">Оформить заказ!</button>
        </li>
    </ul>
</form>
<div class='footer_standart'>
  <span style="font-size: 15pt;">Тех.поддержка:<br>
  Почта: [email protected]<br>
  Telegram: +79529404135<br>
  Номер телефона: +79537752212<span>
</div>
{% endblock %}

А еще, на странице order_list, куда нас должно переводить после оформления заказа, не отображается информация о заказе, которая должна там быть.

Код из order_list.html:

{% extends 'index.html' %}
{% block head %}
<link rel="stylesheet" href="../static/css/order_list.css">
<link rel="stylesheet" href="/static/css/order.css">
{% endblock %}

{% block content %}
<p>
    Заказ № {{zakaz}} был оформлен на имя {{name}} {{fname}} по адресу {{adress}}
</p>
<p>
    Доставка запланирована на {{date}}
</p>
<p>
    Данные для связи:
</p>
<p>
    Телефон: {{phone_number}}
</p>
<p>
    Электронная почта: {{email}}
</p>
<p>
    Тип доставки: {{ delivery_type }}
</p>
<p>
    Сообщение продавцу: {{ send }}
</p>
<div class='footer_standart'>
  <span style="font-size: 15pt;">Тех.поддержка:<br>
  Почта: [email protected]<br>
  Telegram: +79529404135<br>
  Номер телефона: +79537752212<span>
</div>
{% endblock %}

Помогите пожалуйста!!!


Ответы (0 шт):