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

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



def getGoodsFromCategory(self, category):
pass

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

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

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

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

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

68 ответов

88 просмотров

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
если товара в коде, а есть в БД, дальше с ним что ...

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

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

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

30500 за редактор? )
Владимир
47
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Он в одиночку это дело запилил или была какая-то команда?
Aquinary
12
~ 2m21s  nix shell github:nixos/nixpkgs#stack ~  stack ghc -- --version error: … while calling the 'derivationStrict' builtin at /builtin/derivation.nix:...
Rebuild your mind.
6
Oh sorry did you want it in Gunter's chains?
Martin Rys
15
Всем привет, нужна как никогда, нужна помощь с IO в загрузчике. Пишу в code16 после установки сегментных регистров, пишу вывод символа. Пробовал 2 варианта: # 1 mov $0x0E, %a...
Shadow Akira
14
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Всем привет! Имеется функция: function IsValidChar(ch: UTF8Char): Boolean; var i: Integer; ValidChars: AnsiString; begin ValidChars := 'abcdefghijklmnopqrstuvwxyzABCDE...
Евгений
44
Карта сайта