Django. Вопрос по общей философии дизайна: лучший способ реализации "переключаемых" отдельных функций на сайте
Допустим, я хочу создать проект интернет-магазина, который я смогу продавать потенциальным клиентам. Однако идея состоит в том, чтобы сделать так, чтобы клиент выбирал функции, которые он хочет иметь в своем магазине (из заранее составленного списка), и платил только за эти функции, что позволит избежать оплаты за то, что ему не нужно.
Например, один клиент хочет иметь интернет-магазин с корзиной, историей покупок, графиками, отчетами. Другой хочет только простую регистрацию и корзину (но, возможно, в будущем они захотят, чтобы я "включил" и другие функции).
Мой вопрос: какой, по вашему мнению, лучший способ решения этой проблемы с точки зрения разработчика Django?
Мои мысли:
- Create every feature as a separate app and deploy the whole thing commenting out the features that client did not pay for. And when a client wants additional features, I simply go to settings.py and uncomment the app they requested. Can I even make changes on the settings.py file on a live website without restarting it?
- Create an admin panel for myself (the superuser) that will have an ability to turn features on or off. So when the client pays for a new feature, I simply go to my admin panel and put a tick mark next to it, and voila! That way I don't have to make changes in settings.py file (and I don't need access to the hosting server, just the django admin panel). Thought I'm not sure how to do this programmatically. I think I need a separate Model with a lot of BooleanFields(?)
Каковы плюсы и минусы каждого подхода и какие еще способы достижения этой цели вы можете предложить?
Я бы рекомендовал подход с использованием панели администратора. Если вы планируете запустить сервис онлайн, к которому смогут получить доступ многие люди, чтобы создать магазин, вы не захотите вносить изменения в код для такой простой вещи, как добавление функции. Это может стать громоздким и не является хорошей практикой. Также для изменения файла settings.py обычно требуется перезапуск веб-сервиса (т.е. Apache) для повторной инициализации файла.
При подходе с использованием панели администратора все, что вам нужно сделать, - это найти клиента, посмотреть, какие у него есть функции, и установить флажки. Конечно, вы можете усложнить этот процесс, особенно если новая функция будет стоить клиенту дороже. Но просто административный подход лучше всего, он дает вам гибкость и вам не нужно беспокоиться о том, что сайт может быть разрушен в результате изменения кода.