К содержимому
Hub
TechnoMarket — магазин техники

TechnoMarket — магазин техники

Веб2026PythonREST APIJavaScriptМагазинБез зависимостей

Магазин техники с общей базой заказов: витрина, вход по номеру телефона, роли персонала. Сервер написан на чистом Python, без единой зависимости.

Магазин техники и аксессуаров: каталог с категориями, корзина, оформление заказа, вход по номеру телефона и разные права у покупателя и персонала.

Интересна здесь серверная часть. Первая версия жила целиком в одном HTML-файле и хранила всё в памяти браузера: заказ, оформленный на телефоне, не был виден на компьютере. Сервер это исправляет — появляется общая база, и заказ покупателя владелец видит с любой машины.

Написан на стандартной библиотеке Python: http.server для маршрутов, JSON-файл вместо базы, токены в заголовке Authorization. Ни одной сторонней зависимости — запускается на любой машине, где просто есть Python, без установки чего-либо.

Это осознанный размен. Такой сервер не выдержит нагрузки и не годится для настоящих денег: в коде прямо помечено, что нужно заменить перед боевым запуском — настоящие SMS вместо кода в ответе, платёжный шлюз вместо заглушки, PostgreSQL вместо JSON-файла, хеширование и HTTPS.

Как это устроено

Фрагмент из настоящего кода проекта — чтобы было видно, что внутри.

Репозиторий
Python
def api(self, method):    parsed = urllib.parse.urlparse(self.path)    path = parsed.path    db = load_db()    body = self._body() if method in ("POST", "PUT", "DELETE") else {}    me = user_by_token(db, self._token())    if path == "/api/orders" and method == "GET":        if not me:            return self._json({"error": "Нужен вход"}, 401)        if me["role"] in ("owner", "sadmin", "jadmin"):            return self._json(db["orders"])   # персонал видит все заказы        return self._json([o for o in db["orders"]                           if o.get("user") == me["phone"]])    if path == "/api/orders" and method == "POST":        if not me:            return self._json({"error": "Нужен вход"}, 401)        order = {            "id": int(time.time()) % 1000000,            "user": me["phone"],            "items": body.get("items", []),            "total": body.get("total", 0),            "status": "Новый",            "ts": time.time(),        }
Связаться

Заявка на проект

Заполните форму — обсудим детали и сроки.

По проекту: TechnoMarket — магазин техники
Следующий проект

Contacts Book — телефонная книга