flask-shop¶
Shop - интернет магазин с базой данных из 1c
Проект для Яндекс.Лицей.
Функционал¶
- чтение отсчёта из
1c
- админ панель
- поиск товара (elasticsearch)
- cli утилита для сборки
- изменение/добавление
изменение/добавление¶
- файла отсчёта через админ панель
- изображений
- администраторов
- категорий и подкатегорий
- ключевых слов
ext.py¶
build.py¶
Функционал:¶
--sql
собрать базу данныхItem
из отчёта--key
запустить обработку ключевых слов--search
проиндексировать базу данныхItem
Использует:¶
argparse
(аргументы запуска)multiprocessing.Pool
- tqdm Progress Bar
- elasticsearch для поиска
- свой
ext.Parser
Как работает:¶
--sql
и--key
последовательно работают, используяext.Parser
--search
работает, запуская пул процессовmultiprocessing.Pool
+elasticsearch
для поиска
main.py¶
flask-admin¶
админка для сайта с поддержкой flask-login
в которой зарегистрированно все модели + Build (для сборки с сайта)
поиск¶
использует:
- @app.before_request запускается перед любым запросом
- api (api/search)
- ajax (для realtime обновления)
- SearchForm (flask-wtf) форма для поиска
контакты¶
использует: yandex-map-js
- добавленны метки
- информация на клик (картинка, контакты)
- позиционирование по центру
INI¶
форма которая помогает состовлять новые ключевые слова
- красный - только ini
- зелёный - ini и regex
- жёлтый - только regex
api¶
Items id=?¶
получение товаров по id=?
// http://dom59reg.ru/api/items?id=4643
{
"item": {
"Смеситель д/р ORCA \"Тулон\" ORC2421H14": {
"cost": 1991,
"id": 4643,
"count": 2,
"img": "first.jpg"
}
},
"path": [
"Сантехника (отдел)",
"Смеситель",
"Смеситель для раковины"
]
}
Items path=?¶
получение товаров по path=?
// http://dom59reg.ru/api/items?path=1.1.1
{
"items": {
"Смеситель д/р ORCA \"Тулон\" ORC2421H14": {
"cost": 1991,
"id": 4643,
"count": 2,
"img": "first.jpg"
},
// ...
},
"path": [
"Сантехника (отдел)",
"Смеситель",
"Смеситель для раковины"
]
}
Search¶
поиск по слову
// http://dom59reg.ru/api/search?q=Рук
{
"items": {
"Крем д/рук Силиконовый 75мл.": {
"cost": 30,
"id": 7365,
"count": 7,
"img": "not.png"
},
// ...
}
}