GithubHelp home page GithubHelp logo

fidals / refarm-site Goto Github PK

View Code? Open in Web Editor NEW
2.0 13.0 2.0 1.05 MB

Django applications with simple ecommerce functions

License: MIT License

Python 70.46% HTML 6.82% CSS 15.26% JavaScript 7.46%
ecommerce django django-apps pdd refarm-site

refarm-site's Introduction

PDD status

Refarm

bunch of ecommerce django apps

Стандартный функционал для интернет-магазина на Django. Для создания собственного магазина достаточно переиспользовать Django apps из этого проекта. Предназначен для внутреннего пользования.

Репозиторий открыт для знакомства с кодом и процессом разработки команды Фидалс На текущий момент команда Фидалс использует Рефарм для сайтов shopelectro и stroyprombeton.

Глоссарий

Общее для тематики разработки сайтов

Сквозные элементы (сквозняки) - элементы, которые есть на каждой странице сайта. Обычно это меню с товарами, верхняя (хедер) и нижнаяя (футер) части сайтов.

Хлебные крошки (breadcrumbs) - список предков текущего элемента. Есть category page и product page вверху страницы.

Хедер (header, шапка) - верхняя сквозная часть сайта.

Футер (footer, подвал) - нижняя сквозная часть сайта.

Контрол (control) - любой элемент на странице, с которым юзер может взаимодейстовать. Кнопки, галочки, области со всплывающими элементами.

Статика - любые файлы, которые генерируются из кода или данных базы. Бывает фронтовая статика, сайтмапы, yml files.

Сайтмап (sitemap) - файл со всеми страницами сайта.

yml file (yml price, прайсы) - пример файла (3.6 MB). Файлы с нашими товарами для маркет-плейсов. Например Я.Маркет или Гугл мерчант. Являются статикой.

Роботс (robots.txt) - настройки для поисковых машин, которые захаживают на наш сайт. Хранятся в файле robots.txt в корне сайта.

Каталог

Модуль каталог

Категория (category) - раздел, в котором хранятся или другие разделы или товары. Категории представляют из себя дерево.

Корневая категория (root category) - категория, которая не имеет родителей. Обычно такие отображаются в сквозных меню.

Категория второго уровня (second level category) - категория, у которой только один предок - корневая категория. В общем случае "картегория уровня n" - это категория, которая имеет n предков.

Листовая категория (leaf category) - категория, у которой потомки - товары. По аналогии с листовыми элементами графов-деревьев.

Смотреть ещё (watch more) - непрерывный список товаров. Под последней строкой товара помещаем кнопку "смотреть ещё". Когда юзер жмёт кнопку, фронт догружает доп список элементов вниз той же страницы. Возможен вариант с автодогрузкой: когда юзер доскроллил до конца экрана, фронт автоматом догружает новые элементы списка.

Пагинация (pagination) - список ссылок на номера страниц. Из-за сомнительного юзабилити применяем только для СЕО. На каждой странице свой уникальный набор товаров (элементов списка). Один и тот же товар не может находиться на разных страницах.

Теги (tags, мультисвойства) - характеристики товаров. Напряжение 12В - это тег товара. Тегом является пара имя группы тега+значение тега. Например Напряжение+12В. Товары можно фильтровать по тегам на category page.

Группа тегов (tag group) - это группа характеристик. Из примера выше Напряжение - это группа тегов. Напряжение 12В - это уже конкретный тег.

Админка

Модуль generic_admin

Табличный редактор (Table editor) - линк на него. Позволяет редактировать товары прямо в списке просмотра, как в excel.

Контент

Модуль pages

Страница (Page) - любая страница на сайте. Имеет уникальный урл. Важное правило - для одной страницы ровно один урл

[Some] page - тип страницы или "экран". Например main page, admin page и тд. Полный список страниц смотри ниже.

Page template (сео-шаблон) - шаблон на django template language, который можно записать прямо через Админку в базу. Можно изменять правила отображения контента в зависимости от выбранного тега. Например для "Батарейки" можно отображать один текст, а для "Батарейки 12В" - другой. Часто используем для tag pages. Подробнее описан в модуле pages.

Список типов страниц

  • Flat page, /pages/* - обычная страница. Не имеет никакого функционала - только отображает контент, который добавили в неё через Админку. Например "Контакты" или "Гарантии и возврат".

  • Custom page, /* - такие страницы использует внутренняя логика сайта. Если её не будет в базе, сайт будет некорректно отображаться. Примеры custom page: main page, order page, admin page.

  • Model page - любая страница, данные которой хранятся не в самой сущности страницы. Category page и product page - примеры model page.

  • Admin page, /admin/* - любая страница Админки, включая главную - /admin.

  • Table editor page

  • Category page /catalog/categories/* - страница категории. Категория-элемент каталога (Category) в базе связана с Категорией-страницей (Category page). В Админке мы можем редактировать Категорию-страницу. Но её форму включены и поля Категории-элемента каталога.

  • Product page /catalog/products/* - аналогично Category page.

  • Tag page /catalog/categories/*/tags/*/ - пример. Страница категории, отфильтрованная по одному или нескольким тегам. Каждая tag page может иметь свои тексты, h1 и прочие поля (все есть в Админке).

  • Order page /shop/order/* - страница с корзиной и формой заказа.

  • Search page - страница с выдачей поиска по сайту.

refarm-site's People

Contributors

artemijrodionov avatar begor avatar chelovek-18 avatar dependabot[bot] avatar duker33 avatar dveselov avatar ivnglkv avatar ozyryanov avatar shvedovskiy avatar yozhezhi avatar

Stargazers

 avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

refarm-site's Issues

Enable ngx_http_gzip_module

Встретил упоминание о нём на лекции для админов от 2014г.
Модуль gzip'ает файлы предварительно, а не в момент ответа.
Что-то типа кэша. Мб такое кэширование уже работает по дефолту, а значит и в текущей конфигурации серва, исследуй.

Если оно уже работает, никаких модулей не врубаем, конечно же

Expose orders list from admin

Сейчас заказы отправляются через mail.
Практика показывает, что mail - не самый надёжный механизм.
Часто бывает, бизнесу нужно видеть дампы заказов.

Для этого просто показываем список заказов в Админке в readonly режиме.

Возможно трогать нужно будет только код SE/STB, но не код Рефарма

test_views.py:1-2: Move test case to custom redirects app...

The puzzle 140-694a3b50 from #140 has to be resolved:

# @todo #140:30m Move test case to custom redirects app
# You can find example at SE's tests_views.Redirects app

The puzzle was created by duker33 on 22-Jul-18.

Estimate: 30 minutes,

If you have any technical questions, don't ask me, submit new tickets instead. The task will be "done" when the problem is fixed and the text of the puzzle is removed from the source code. Here is more about PDD and about me.

Create control panel for static

Create control panel using DjangoAdmin.
Enable it for SE and STB (create additional tasks for them)

Control panel should contain this features:

  • Button, that launch regeneration for all types of static: front, sitemap, yml-prices, excel files
  • Write the datetime of last regeneration for each type of file
  • Change contents of robots.txt file

No mockups for this task, becausee Django admin will dictate how interface will look like

Update RobotsView

Update RobotsView to remove duplication.

From:

custom_page_url(
    r'^(?P<page>robots\.txt)/$',
    RobotsView.as_view(in_db=True, objects=CustomPage.objects.filter(slug='robots.txt'),
))

To:

custom_page_url(r'^(?P<page>robots\.txt)/$', RobotsView.as_view(in_db=True)))

Release RF

Fix sorl failing on png loading

Сейчас sorl-images падает при обработке png. Хочет только jpg. Возможно дело в либе, которую юзает sorl. Мы юзаем pillow, но здесь сказано, что можно выбрать другую.
Потести обработку png на разных либах и запихни правильную либу в контейнер.

https://sorl-thumbnail.readthedocs.io/en/latest/requirements.html#image-library

Автор: Дюк

Refactor PageModel

  • Перепроектируем refarm.
    Делаем все модели абстрактными.
  • Выпилить миксин Page с save/delete хуками. Создавать страницы явно, перед созданием связанных сущностей.

Автор: Артемий

Дюк: есть подозрение, что это уже сделали

Blog app initial functions

Create Refarm blog app initial functions

Requirements

  • Define different posts types as module setting. Proto-site can change this setting.
  • Every post has it's own alias before id. Post have no alias, if alias doesn't specified in setting.
    Example:
[Новости, news/]
[Статьи, ]

I resolved this issue at #3

Апгрейд сервера

Нужно решить, как поступить с сервером: обновить существующую конфигурацию или перенести CI на отдельный сервер.

Gen favicons

Генерировать фавиконки нужно по-пацански realfavicongenerator.net

Автор: Саня

Enable Postgres connection pool

Прикручиваем Postgres connection pool со стороны клиента. Вроде есть стандартный в Джанговый connection pool.
Мб он уже работает по умолчанию

Add .editorconfig. se2, stb2

For SE and STB sites too.
http://editorconfig.org/

Here is example from other's our py project:

# editorconfig.org
root = true

[*]
indent_style = space
indent_size = 4
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true

[*.md]
trim_trailing_whitespace = false


[*.yaml]
indent_style = space
indent_size = 2

[Makefile]
indent_style = tab
indent_size = 4

Resolve search arch problems

На Бетоне search page не подгружает стили.
Это из-за того, что он не интегрирован с Рефармом.

Для интеграции освежу архитектуру SearchView в Рефарме

test_views.py:20-21: Create fixtures for tests now we...

The puzzle 85-cd2a1d57 from #85 has to be resolved:

# @todo #85 Create fixtures for tests
# now we have huge code doubling

The puzzle was created by duker33 on 01-Mar-18.

Estimate: 0 minutes, role: DEV.

If you have any technical questions, don't ask me, submit new tickets instead. The task will be "done" when the problem is fixed and the text of the puzzle is removed from the source code. Here is more about PDD and about me.

test_settings.py:65-67: Use `refarm-site's` packages with...

The puzzle 140-e3f06142 from #140 has to be resolved:

# @todo #140:60m Use `refarm-site's` packages with it's prefix.
# For example do `INSTALLED_APPS = ['refarm-site.pages', ...]`
# instead of just `['pages']`.

The puzzle was created by duker33 on 22-Jul-18.

Estimate: 60 minutes,

If you have any technical questions, don't ask me, submit new tickets instead. The task will be "done" when the problem is fixed and the text of the puzzle is removed from the source code. Here is more about PDD and about me.

Use docker .env file

Юзаем env_file в докер компосе, чтобы не дублировать параметры настроек, сейчас все кучей навалены в environment отдельно для каждого сервиса

Автор: Артемий

Admin - No content list

Сейчас (в SE) по урлам /no_images/ и /no_text/ мы отдаём товары у которых нету описаний и картинок соотв.
По-хорошему нужно добавить соотв фильтры для списка в админке.
На случай, если будут принтить список из админки, можно разметить его html под принтеры.

test_views.py:14-16: Remove hardcoded fixture data....

The puzzle 360-25169cf6 from #360 has to be resolved:

# @todo #360:30m Remove hardcoded fixture data.
# Replace `url_from` and `url_to` with urls, generated from db.
# It'll be much more short and clear.

The puzzle was created by duker33 on 23-Jul-18.

Estimate: 30 minutes,

If you have any technical questions, don't ask me, submit new tickets instead. The task will be "done" when the problem is fixed and the text of the puzzle is removed from the source code. Here is more about PDD and about me.

Remove config.py

Выпилим config.py с сайтов. Переносим его содержимое в settings, utils и т.д.

MAIN_PAGE_TILE делаем отдельной сущностью в базе и прикручиваем к админке

Move docs from RST to MD

Коротко: переходим с rst на md. Ваши за/против.


Наслушался я тут подкастов от ТехРайтеров, как они там rst-доки расхваливают.
Ни с кем не посоветовался, да запустил всю документаху на rst.
А теперь вот думаю, что от этого сплошные неудобства.
Доков у нас немного. А те, что есть, намертво привязаны к разделам.
Получается, мы можем тупо юзать md-файлы, а Гитхаб их сам будет их норм отображать.

Гитхаб не умеет норм отображать rst, если что. И сейчас мы делаем много всего: генерим доки на локали для проверки, генерим их в CI, повесили их на отдельные домены.

В общем, rst было сплошной ошибкой.
Предлагаю перейти на md. Я сам лично перекатаю текущие зачатки доки на md и посношу все следы от rst.

Подкаст: http://devzen.ru/episode-0144/

Fix README.

README is looking a bit messy:
screenshot from 2016-04-26 12-50-09

Fix it by wrapping all of the code snippets (even CONSTANTS) in code blocks.

trackers.es6:1: Integrate trackers to STB and SE

The puzzle 292-ba927d60 from #292 has to be resolved:

// @todo #292 Integrate trackers to STB and SE

The puzzle was created by Artemiy on 05-Jun-18.

Estimate: 0 minutes,

If you have any technical questions, don't ask me, submit new tickets instead. The task will be "done" when the problem is fixed and the text of the puzzle is removed from the source code. Here is more about PDD and about me.

Refactor Search Arch

В рамках задачи FullText Search, переделываем архитектуру Search.

Олег уже оставил PRs на эту тему. Проверь, подчисти их и выставляй на Ревью

Автор: Дюк

Выносим search в отдельный app

Автор: Дима

views.py:130-131: - refactor autocomplete view common...

The puzzle 85-5b8190cf from #85 has to be resolved:

refarm-site/search/views.py

Lines 130 to 131 in 189ed00

# @todo #85 - refactor autocomplete view
# common view class should know nothing about search entities

The puzzle was created by duker33 on 01-Mar-18.

Estimate: 0 minutes, role: DEV.

If you have any technical questions, don't ask me, submit new tickets instead. The task will be "done" when the problem is fixed and the text of the puzzle is removed from the source code. Here is more about PDD and about me.

test_views.py:72-74: - Fix search results order Search...

The puzzle 85-01b685cc from #85 has to be resolved:

@todo #85 - Fix search results order
Search results with leading term in result text
should go before other results

The puzzle was created by duker33 on 01-Mar-18.

Estimate: 0 minutes, role: DEV.

If you have any technical questions, don't ask me, submit new tickets instead. The task will be "done" when the problem is fixed and the text of the puzzle is removed from the source code. Here is more about PDD and about me.

Warmup cache after deploy

Делаем Warmup cache сразу после запуска контейнеров при деплое.
Возможно поюзаем постгресовую утилиту warmup cache, а возможно какое-то решение на уровне Джанги.

Сейчас есть проблема с тем, что после деплоя долго открываются страницы. С приходом CD эта проблема усугубится

Create Admin users

Разделить пользователей в админке на staff и superuser
Дать супер-юзеру привилегии на просмотр логов и создание юзеров. У стаф-юзера убрать эти привилегии и проконтролировать возможности создавать, редактировать и удалять сущности.

Автор: Артемий

Improve Admin UI

Оригинал задачи в Трелло


Реализуй, всё что сказано ниже и на SE и на STB


В админке неудобно присваивать товарам категорию, потому что в поле категория нельзя написать название нужной категории.

Сейчас алгоритм назначения категории такой: вводишь первые две буквы нужной категории и в выпадает список со всеми категориями, которые начинаются на эту букву. Это неудобно.

Поэтому сделай так, чтобы в поле можно было ввести текст и получить результаты по текстовому запросу: http://prntscr.com/esrddn


Сделай хоткей для кнопки «сохранить и продолжить редактирование». Предлагаю Ctrl+Enter


Сделай так, чтобы на product page можно было загрузить одновременно до 10 фотографий. Сейчас каждую новую фотографию нужно добавлять в новое поле. Неудобно и долго.

Эти поля удаляй, мы ими никогда не пользуемся: http://prntscr.com/essh99
Вместо них оставляй только кнопку «Добавить фотографии». Нажимаешь на кнопку — открывается рабочий стол компа. С рабочего стола я могу загрузить одновременно до 10 фотографий (сейчас можно загрузить только одну). Загрузка фотографий на серв происходит автоматически (сейчас фото загружаются на серв после сохранения страницы).

После загрузки фото на странице товара выглядят так: http://prntscr.com/et5pds. Нет лишних полей, осталась только кнопка, которая выделяет главную фотографию.

urls.py:8: Use custom_page_url for every custom page route.

The puzzle 343-7b06e173 from #343 has to be resolved:

# @todo #343:30m Use custom_page_url for every custom page route.

The puzzle was created by Artemiy on 21-Jun-18.

Estimate: 30 minutes,

If you have any technical questions, don't ask me, submit new tickets instead. The task will be "done" when the problem is fixed and the text of the puzzle is removed from the source code. Here is more about PDD and about me.

Research Selenium Grid

Разобраться с Selenium Grid (понять нужен ли он вообще)

Автор: Дима

Enable page generation cache

Сейчас главная SE, например, генерится 400-600 ms. Это непростительно долго.
Я так понимаю, мы можем сходить в кэш в память и достать её за 30 мс, или типа того.

Решение мб на стороне nginx'а, Джанги (django templates caching) или вообще какого-нить внешнего сервиса. Типа varnish какого-нить.

Этот кэш обязательно прогреваем при каждом деплое. С приходом CD у нас будет по деплою на один мерж.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.