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

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



def getGoodsFromCategory(self, category):
pass

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

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

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

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

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

68 ответов

27 просмотров

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🇺🇦- Автор вопроса
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🇺🇦
https://dpaste.org/Redm2 обоссыте меня, но нежно

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

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

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

Ax3🇺🇦
https://dpaste.org/Redm2 обоссыте меня, но нежно

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

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

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

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

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

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

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

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

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

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

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

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

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

Скажите, можно ли как-то "переместить" динамический массив из одной переменной в другую? Скажем, переместить из TList<> в TArray<>. Именно переместить, а не скопировать. Если ...
Eugene Krasnikov (ᴊɪɴ x)
37
комрады, че-та лыжы не едут var tmpFont: TFont; begin tmpFont:= TFont.Create; try case rgFontColor.ItemIndex of 0: tmpFont.Color:= clWindowText; 1: tmpFo...
Ed Doc
34
Is there a digital way to cut the electricity from a usb in linux? It sounds weird, but it's exactly what I need to do. I tried to simulate the unplug/replug but is not the ...
Eduard Rivas
14
М-да. Почему бы просто со stringlist не работать?
Michael Longneck
18
Интересно, нет ли какого-то способа получить из dll не адрес самой метки, а адрес со смещением?
The Bird of Hermes
54
generic procedure function test<T>(param: T); type case T of longint: NewT = word; longword: NewT = byte; end; var v1: NewT; Как это можно сделать? Чтобы у меня...
notme
21
Можно вообще написать: Person fName' lName' age'. Тогда действительно имена полей потребуются лишь в строковом виде, чтобы эти fName' и т.д. достать :-) Но разве для этого нуж...
Михаил
8
Делал задачу вот такую https://stepik.org/lesson/4985/step/9?unit=1083 получилось такое https://play.haskell.org/saved/ipKrepqe оно работает, тестов много не писал, но работае...
Fedor
22
Hello everyone I am trying to run 4 year old project and I am having this issue anyone can help?
Nitish Garg
11
преобразовать в число или в один тип?
Alexey Kulakov
11
Карта сайта