170 похожих чатов

Хм. Представим себе класс Database от интернет-магаза, у которого есть метод



def getGoodsFromCategory(self, category):
pass

Как лучше сделать ввод категории?

Есть вариант с Enum, но мне вообще не нравится его синтаксис с постоянным .value в конце каждого ввода

Есть вариант сделать тапл со всеми категориями которые есть в магазине, а потом проверять category in category_list

Ещё можно просто обычный класс использовать аля енум, но без мозгодрочива с валюэ в конце.

Всё как-то костыльно, дохрена разных вариантов. Как-то по рубиевски.

68 ответов

23 просмотра

1. .value это нормально, но он фактически будет только там где ты конвертируешь значение для внешней системы. 2. категорий обычно число переменное, а не фиксированное на эта разработке. Имеет смысл их положить в БД

Ax3🇺🇦- Автор вопроса
Tishka17
1. .value это нормально, но он фактически будет то...

хм.... 1. Там по сути только это и будет. Типа категорию пихнуть в запрос и выдать ответ от бд в виде списка. 2. То есть пойти по второму варианту с таплом?

Ax3🇺🇦
хм.... 1. Там по сути только это и будет. Типа ка...

по третьему варианту - с доп таблицей в БД

Пожалуй имеет смысл передавать category_id

Ax3🇺🇦- Автор вопроса
Arkady Strugatsky
Пожалуй имеет смысл передавать category_id

на фронте будет прям в кайф пихать непонятные цыфирки в запрос бд

Ax3🇺🇦- Автор вопроса
Ax3🇺🇦
на фронте будет прям в кайф пихать непонятные цыфи...

id это вполне понятные циферки, они у тебя везде

Ax3🇺🇦
я апи делаю

Тогда сделай отдельный эндпоинт на получение всех категорий

Ax3🇺🇦- Автор вопроса
Tishka17
id это вполне понятные циферки, они у тебя везде

хм. Не совсем могу понять. Будет отдельная табличка categories, куда я буду пихать все категории что есть в бд. А на вход в getGoodsFromCategory пихать не название категории, а её айди? Тогда всё равно енум какой-то юзать придется, чтобы обозвать эти циферки в коде.

Ax3🇺🇦
хм. Не совсем могу понять. Будет отдельная таблич...

не энум, а нормальные полноценные модельки на несколько полей: айди, название, цвет, родительская категория

Tishka17
не энум, а нормальные полноценные модельки на неск...

С родительской категорией интересно кстати. Нужен будет какой-то рекурсивный sql запрос

Arkady Strugatsky
С родительской категорией интересно кстати. Нужен ...

не всегда, зависит от реализации дерева, есть штук 5 классических способов. Ну и не всегда нужно рекурсивно товары показывать

Tishka17
не всегда, зависит от реализации дерева, есть штук...

Если условиться что в любой категории могут быть и товары и подкатегории- без рекурсии никак

Arkady Strugatsky
Если условиться что в любой категории могут быть и...

не всегда ты хочешь при этом видеть товары подкатегорий

Ax3🇺🇦- Автор вопроса
Tishka17
не всегда ты хочешь при этом видеть товары подкате...

Разве не все товары будут лететь в какую-то из подкатегорий?

Ax3🇺🇦
Разве не все товары будут лететь в какую-то из под...

логика может быть очень всратая, заказчики те ещё выдумщики

Ax3🇺🇦
Разве не все товары будут лететь в какую-то из под...

В категории «хлеб» у тебя могут быть товары «хлеб бородинский», «хлеб тостовый» и подкатегория «батоны»

Ax3🇺🇦
батоны тоже хлеб

Поэтому это подкатегория категории хлеб

Ax3🇺🇦
батоны тоже хлеб

Ну логично, в том и суть примера

Ax3🇺🇦- Автор вопроса
Ax3🇺🇦
Разве не все товары будут лететь в какую-то из под...

а. Я думал ты про отрицательный пример этого сообщения

Ax3🇺🇦- Автор вопроса

Я нигде не видел что-то про какие-то модели. Можно норм статью/гайд на эту тему?

Ax3🇺🇦- Автор вопроса
Dmitry Antohi
https://docs.sqlalchemy.org/en/20/orm/

Брух. Я пока орм вообще никакие не юзал, на голых запросах живу. Спасибо за наводку

Ax3🇺🇦
на фронте будет прям в кайф пихать непонятные цыфи...

На фронте нет никаких запросов к дб, ты делаешь get на ендпоинт с параметрами в url, или post с параметрами в теле запроса

Ax3🇺🇦
эндпоинт?

Ты вообще понимаешь что делаешь?

Ax3🇺🇦- Автор вопроса

Есть фронт, есть бэк. Фронтенд это код, который работает на компьютере клиента, бэк енд это код, который работает на стороне сервера

Ax3🇺🇦- Автор вопроса
Илья Власов
Есть фронт, есть бэк. Фронтенд это код, который ра...

Запрос к базе данных должен получать фрон, чтобы отрисовать нужные ячейки с товарами. Для этого нужно их получить. Запрос к апи с нужной категорией. Где я ошибся?

Ax3🇺🇦
Запрос к базе данных должен получать фрон, чтобы о...

Нет, еще раз говорю -- для своего приложения опиши какая его часть это фронт, а какая его часть это бэк

Ax3🇺🇦
Запрос к базе данных должен получать фрон, чтобы о...

Фронт к тебя получает текст с данными а не запрос

Ax3🇺🇦
Запрос к базе данных должен получать фрон, чтобы о...

https://docs.djangoproject.com/en/4.2/ https://angular.io/docs Почитай, подумай, и потом спрашивай

Ax3🇺🇦
Запрос к базе данных должен получать фрон, чтобы о...

Получается фронтенд должен делать get запрос на товары с фильтром по категории

Ax3🇺🇦- Автор вопроса
Ax3🇺🇦- Автор вопроса
Tishka17
Ну вот товар у тебя что?

вплане? Продукты. Да, не спрашивай.

Ax3🇺🇦- Автор вопроса
Tishka17
В плане кода

У меня нет модельки товара. Вот бд которая у меня есть сейчас под продукты CREATE TABLE IF NOT EXISTS goods ( id INT PRIMARY KEY, name VARCHAR(255) NOT NULL, available BOOLEAN NOT NULL, price DECIMAL(10, 2) NOT NULL, photo_url VARCHAR(255) NOT NULL, category_id INT NOT NULL );

Ax3🇺🇦- Автор вопроса
Ax3🇺🇦
У меня нет модельки товара. Вот бд которая у меня ...

Я только полез в что-то сложнее простых запросов в бд, и не понимаю как это связать и представлять в коде, так что что-то внятное не покажу

Ax3🇺🇦- Автор вопроса
Tishka17
Это бд, а в питон?

Синглтон бд, которая создает эту бд при инициализации и возвращает объект. Не готовый проект, если что.

Ax3🇺🇦- Автор вопроса
Ax3🇺🇦
Синглтон бд, которая создает эту бд при инициализа...

Хм... не инициализации. Назовём это созданием объекта, я путаюсь в терминах.

Ax3🇺🇦- Автор вопроса

я не понимаю про что ты говоришь.

я спросил, что такое товар в твоём коде

Ax3🇺🇦- Автор вопроса
Tishka17
я спросил, что такое товар в твоём коде

У меня нет товара в коде. Я как раз и думал насчёт того, как запихнуть вывод из бд в какую-то модель. Была идея сделать просто что-то аля датакласса с нужными полями, но ты сказал что-то про модель и я сейчас ищу что это такое и как юзать

Ax3🇺🇦
У меня нет товара в коде. Я как раз и думал насчёт...

а с самой БД как работаешь? Есть ОРМ или на голом скл?

Ax3🇺🇦- Автор вопроса
Ax3🇺🇦- Автор вопроса
Ax3🇺🇦
https://dpaste.org/Redm2 обоссыте меня, но нежно

это даже не синглтон, а Божественный Объект

Ax3🇺🇦- Автор вопроса
Alex
это даже не синглтон, а Божественный Объект

у меня не получилось норм синглтон написать со своей головы. васян-решение делал сам

Ax3🇺🇦- Автор вопроса
Ax3🇺🇦
https://dpaste.org/Redm2 обоссыте меня, но нежно

Во-первых никаких синглтонов. Просто создай объект на этапе инициализации приложения и потом везде пробрасывай. Во-вторых - разделение ответственностей. У тебя один и тот же класс выполняет бизнес-логику запроса в базу данных и создает таблицы. Рекоммендую разделить эти действия.

Ax3🇺🇦- Автор вопроса

вплане "разделить" ? Пихнуть это в отдельно стоящую функцию?

Ax3🇺🇦
вплане "разделить" ? Пихнуть это в отдельно стоящу...

По-хорошему миграции лучше отдать чему-то вроде алембика или миграторам баз данных. Бизнес-логику запросов для начала можно вынести в Шлюз по-Фаулеру. Гугли TableGateway.

Ax3🇺🇦- Автор вопроса
Ax3🇺🇦
...

Вы как будто со взрослым разговариваете, ей богу

Ax3🇺🇦
У меня нет товара в коде. Я как раз и думал насчёт...

если товара в коде, а есть в БД, дальше с ним что просходит?

Ax3🇺🇦- Автор вопроса
Tishka17
если товара в коде, а есть в БД, дальше с ним что ...

Пожалуйста, перефразируй, я не могу понять о чем ты

Похожие вопросы

Обсуждают сегодня

А еще в перле можно уже @arr1 + @arr2?
Sergei Zhmylove
53
я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
Подскажите, где смотреть результат выполнения программы? Код: ;.686 ;Система команд процессора 686 ;.MODEL FLAT,stdcall ;Модель памяти плоская, станда...
Егор Анелькин
5
Привет всем. появился вопрос. Разрабатываю сайт, в данный момент он запущен. Хостинг beget. Добавляю на сайт яндекс метрику с помощью полей client-settings (взято отсюда http...
Andrew
2
;.686 ;Система команд процессора 686 ;.MODEL FLAT,stdcall ;Модель памяти плоская, стандартный ;вызов процедуры ;option casemap:no...
Егор Анелькин
1
почому оно не работает?
Vi Chapmann Chapmann
19
Так а кто может спарсить всех участников чата? Идишники
Magic
18
Есть вопрос: допустим есть железка с каким-то интерфейсом(допустим usb), но как по этому интерфейсу железкой управлять неизвестно, прог нету, а управлять очень хочется надо. К...
Mixail Frolov
15
а как ловят такое ghci> res <- getPos2 urlt 0 (alist !! 0) 200 ghci> res SearchAtom (Search "www.google.com" "/search?q=" "Haskell") "haskell.org" (SearchTS [(2024-05-06 07:...
Fedor
14
короче сгенерила мне эта штука код на ассемблере: struc string val { common local .value dq .value .value: if ~val eq db val end if db 0 } fo...
Vi Chapmann Chapmann
12
Карта сайта