Закрыть

Для эффективной работы на сайте используются cookie и обработка персональных данных. Пользуясь этим сайтом, вы соглашаетесь с правилами использования сайта. Подробнее

Цитата дня

Vivazzi.ru

Личный сайт Мальцева Артема

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

Чак Норрис

17. Конфигурация и настройки

Сам фреймворк djangoSHOP требует всего несколько директив. Однако, каждый интернет-магазин строится вокруг djangoSHOP, который состоит из собственного приложения продавца и содержит коллекцию сторонних Django приложений. В этом разделе мы рассмотрим конфигурационные настройки приложений:

17.1. Настройки DjangoSHOP

17.1.1. Название приложения

Это название требуется для конфигурации имён таблиц в базе данных, а также для реализации торговли.

SHOP_APP_LABEL = 'myshop'

17.1.2. Альтернативная пользовательская модель

Во встроенной модели пользователя в Django не хватает несколько функций, которые требуются для djangoSHOP: в основном, возможность использовать эл. почту как логин для входа на сайт. Эта переопределяемая модель на 100% совместима со встроенной модели пользователя Django и даже переиспользует саму таблицу auth_user в базе данных.

AUTH_USER_MODEL = 'email_auth.User'

Так как эта модель пользователя намеренно не обеспечивает уникальность email адресов, то нужно отметить, чтобы Django "молчаливо" реагировал на данное предупреждение:

SILENCED_SYSTEM_CHECKS = ('auth.W004')

Более подробную информацию смотрите в разделе Модель покупателя.

17.1.3. Authentication Backends

AUTHENTICATION_BACKENDS = (
    'django.contrib.auth.backends.ModelBackend',
    'allauth.account.auth_backends.AuthenticationBackend',
)

17.1.4. Currency

Для указания типа Money мы можем воспользоваться следующей константой:

SHOP_DEFAULT_CURRENCY = 'EUR'

$ 1.23 - типичный формат для рендера суммы, но некоторые продавцы предпочитают 1.23 USD. Используя следующую настройку

SHOP_MONEY_FORMAT = '{symbol} {amount}'

мы можем указать конкретный формат вывода, где {symbol} - это €, $, £ и т. д. и {currency} - это EUR, USD, GBP и т. д.

17.1.5. Модификаторы корзины

Каждый проект требует по крайней мере один модификатор для инициализации корзины. В большинстве реализаций shop.modifiers.defaults.DefaultCartModifier будет достаточно, но в зависимости от моделей продукта, продавец может захотеть альтернативную реализацию.

Для идентификации налогов в корзине, используйте один из предоставленных налоговых модификаторов или создайте свой.

Другие модификаторы могут добавлять дополнительные стоимости оплаты и доставки, или пересчитывать общую стоимость при любых обстоятельствах.

SHOP_CART_MODIFIERS = (
    'shop.modifiers.defaults.DefaultCartModifier',
    'shop.modifiers.taxes.CartExcludedTaxModifier',
    # other modifiers
)

Более подробную информацию смотрите в разделе Модификаторы корзины.

17.1.6. Установленные Django приложения

Имеется конфигурация, которая работает. Специальные и дополнительные приложения обсуждаются ниже.

INSTALLED_APPS = (
    'django.contrib.auth',
    'email_auth',
    'polymorphic',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'djangocms_admin_style',
    'django.contrib.admin',
    'django.contrib.staticfiles',
    'django.contrib.sitemaps',
    'djangocms_text_ckeditor',
    'django_select2',
    'cmsplugin_cascade',
    'cmsplugin_cascade.clipboard',
    'cmsplugin_cascade.sharable',
    'cmsplugin_cascade.extra_fields',
    'cmsplugin_cascade.segmentation',
    'cms_bootstrap3',
    'adminsortable2',
    'rest_framework',
    'rest_framework.authtoken',
    'rest_auth',
    'django_fsm',
    'fsm_admin',
    'djng',
    'cms',
    'menus',
    'treebeard',
    'compressor',
    'sekizai',
    'sass_processor',
    'django_filters',
    'filer',
    'easy_thumbnails',
    'easy_thumbnails.optimize',
    'parler',
    'post_office',
    'haystack',
    'shop',
    'my_shop_implementation',
)
  • email_auth опционально, но рекомендуется, переопределяет встроенную аутентификацию. Должно быть добавлено после django.contrib.auth.
  • polymorphic необходимо, если в сайте требуется более, чем один тип модели продукта. Требуется установить django-polymorphic.
  • djangocms_text_ckeditor опционально, добавляет WYSIWYG HTML редактор, который хорошо интегрирован с djangoCMS.
  • django_select2 опционально, добавляет поле выбора (select) в Django админку, которая добавляет автозаполнение. Полезно для ручного добавления ссылок на продукты. Требуется установить django-select2.
  • cmsplugin_cascade добавляет функциональность для добавления CMS плагинов, которые предоставляются django-SHOP для заполнения CMS заполнителей.
  • cmsplugin_cascade.clipboard позволяет администратору копировать набор плагинов из одного сайта в другой.
  • cmsplugin_cascade.sharable позволяет администратору распространять заранеее настроенный конфигурационный набор атрибутов в алиас для переиспользования другими плагинами такого же типа.
  • cmsplugin_cascade.extra_fields позволяет администратору добавлять произвольные CSS классы, стили и ID-поля для определённых плагинов.
  • cmsplugin_cascade.segmentation позволяет сегментировать набор плагинов в логические единицы.
  • cms_bootstrap3 добавляет некоторые шаблоны и шаблонные теги для рендера стилизованного меню и навигационных баров, используя фреймворк Bootstrap 3.
  • adminsortable2 позволяет администратору сортировать различные элементы в административной части сайта.
  • rest_framework, rest_framework.authtoken and rest_auth, необходимо для REST функциональности в djangoSHOP.
  • django_fsm and fsm_admin, необходимо для Машины конечных состояний (Finite State Machine) в djangoSHOP.
  • djng необходимо лишь для инсталяции, используя AngularJS, который рекомендуется в качестве JavaScript фреймворка. Добавляет слой интерфейса между Django и AngularJS и требует, чтобы django-angular был установлен.
  • cms, menus and treebeard требуются если djangoSHOP используется в сочетании с djangoCMS.
  • compressor, настоятельно рекомендуется. Склеивает и минифицирует CSS и JavaScript файлы на боевом сервере. Должен быть установлен django-compressor.
  • sekizai, настоятельно рекомендуется и позволяет группировать CSS и JavaScript файлы. Должен быть установлен django-sekizai.
  • sass_processor, опционально, но рекомендуется. Используется для конвертации SASS в CSS вместе нформацией отладки. Должен быть установлен django-sass-processor.
  • django_filters, опционально, используется для фильтрации продуктов по их атрибуту с использованием параметров запроса.
  • filer, очень рекомендуется, управляет вашими медиа-файлами в Django. Должен быть установлен django-filer.
  • easy_thumbnails и easy_thumbnails.optimize настоятельно рекомендуется, обрабатывает генерацию миниатюр и оптимизирует их. Должен быть установлен easy-thumbnails.
  • parler - опциональный фреймворк, который обрабатывает переводы полей модели на другие языки.
  • post_office настоятельно рекомендуется. Приложение по асинхронной отправки почтовых сообщений, который не прерывает цикл запрос-ответ, когда отправляет письмо.
  • haystack опционально, обрабатывает интерфейс между Django и Elasticsearch – полнотекстового поискового механизма. Должен быть установлен ElasticSearch, django-haystack и drf-haystack.
  • shop - djangoSHOP фреймворк.
  • my_shop_implementation - собственная реализация торговли этого интернет-магазина.

17.1.7. Классы промежуточного слоя

Это конфигурация проверена и работает. Специальные классы промежуточного слоя обсуждаются ниже.

MIDDLEWARE_CLASSES = (
    'djng.middleware.AngularUrlMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'shop.middleware.CustomerMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.locale.LocaleMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.gzip.GZipMiddleware',
    'cms.middleware.language.LanguageCookieMiddleware',
    'cms.middleware.user.CurrentUserMiddleware',
    'cms.middleware.page.CurrentPageMiddleware',
    'cms.middleware.toolbar.ToolbarMiddleware',
)
  • djng.middleware.AngularUrlMiddleware добавляет специальный маршутизатор для того, чтобы использовать Django реверс-функцию из JavaScript.
  • shop.middleware.CustomerMiddleware добавляет объект Customer в каждый запрос.

17.1.8. Статические файлы

Если компрессор и/или sass_processor есть в INSTALLED_APPS, то добавьте их искатели в список STATICFILES_FINDERS

STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder',
    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
    'sass_processor.finders.CssFinder',
    'compressor.finders.CompressorFinder',
)

Так как djangoSHOP требует несколько пакетов сторонних приложений, которые не доступны из PyPI, они могут быть инсталированы через npm. Для того, чтобы сделать эти файлы доступными в нашем Django приложении, мы должны использовать следующую настройку:

STATICFILES_DIRS = (
    os.path.join(BASE_DIR, 'static'),
    ('node_modules', os.path.join(PROJECT_ROOT, 'node_modules')),
)

Некоторые файлы инсталлированные через npm обрабатываются django-sass-processor и, следовательно, их пути должны быть доступны:

NODE_MODULES_URL = STATIC_URL + 'node_modules/'

SASS_PROCESSOR_INCLUDE_DIRS = (
    os.path.join(PROJECT_ROOT, 'node_modules'),
)

17.1.9. Шаблонные процессоры контекста

Шаблоны, которые рендерятся с помощью djangoSHOP, требуют объект Customer в их контексте. Для конфигурации добавьте настройки шаблонные процессоры контекста:

TEMPLATES = [{
    ...
    'OPTIONS': {
        'context_processors': (
            ...
            'shop.context_processors.customer',
            'shop.context_processors.version',
        ),
    },
}]

17.1.10. Workflow-миксины

SHOP_ORDER_WORKFLOWS = (
    'shop.payment.defaults.PayInAdvanceWorkflowMixin',
    'shop.shipping.defaults.CommissionGoodsWorkflowMixin',
    # other workflow mixins
)

17.1.11. REST фреймворк

REST фреймворк требует специальных настроек. Мы точно должны сообщить ему, как сериализовать наш специальный тип Money:

REST_FRAMEWORK = {
    'DEFAULT_RENDERER_CLASSES': (
        'shop.rest.money.JSONRenderer',
        'rest_framework.renderers.BrowsableAPIRenderer',
    ),
    'DEFAULT_FILTER_BACKENDS': ('rest_framework.filters.DjangoFilterBackend',),
    'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.LimitOffsetPagination',
    'PAGE_SIZE': 12,
}

SERIALIZATION_MODULES = {'json': str('shop.money.serializers')}

17.1.12. Django CMS и Cascade настройки

DjangoSHOP требует по крайней мере один CMS шаблон. Убедитесь, что он содержит заполнитель.

CMS_TEMPLATES = (
    ('myshop/pages/default.html', _("Default Page")),
)

CMS_PERMISSION = False

DjangoSHOP обогащает djangocms-cascade несколькими специфическими плагинами для интернет-магазина.

from cmsplugin_cascade.extra_fields.config import PluginExtraFieldsConfig

CMSPLUGIN_CASCADE_PLUGINS = ('cmsplugin_cascade.segmentation', 'cmsplugin_cascade.generic',
    'cmsplugin_cascade.link', 'shop.cascade', 'cmsplugin_cascade.bootstrap3',)

CMSPLUGIN_CASCADE = {
    'link_plugin_classes': (
        'shop.cascade.plugin_base.CatalogLinkPluginBase',
        'cmsplugin_cascade.link.plugin_base.LinkElementMixin',
        'shop.cascade.plugin_base.CatalogLinkForm',
    ),
    'dependencies': {
        'shop/js/admin/shoplinkplugin.js': 'cascade/js/admin/linkpluginbase.js',
    },
    'alien_plugins': ('TextPlugin', 'TextLinkPlugin',),
    'bootstrap3': {
        'template_basedir': 'angular-ui',
    },
    'plugins_with_extra_fields': {
        'ExtraAnnotationFormPlugin': PluginExtraFieldsConfig(),
        'ShopProceedButton': PluginExtraFieldsConfig(),
        'ShopAddToCartPlugin': PluginExtraFieldsConfig(),
    },
    'segmentation_mixins': (
        ('shop.cascade.segmentation.EmulateCustomerModelMixin',
         'shop.cascade.segmentation.EmulateCustomerAdminMixin'),
    ),
    'plugins_with_extra_render_templates': {
        'CustomSnippetPlugin': [
            ('shop/catalog/product-heading.html', _("Product Heading"))
        ],
    },
}

Так как мы хотим добавлять произвольные ссылки на карточку продукта, django-SHOP предлагает модифицированный плагин Ссылка. И должна быть включена с помощью 3-кортежного link_plugin_classes. Имеется также вспомогательный файл JavaScript shop/js/admin/shoplinkplugin.js, который зависит от другого JavaScript файла.

DjangoSHOP использует AngularJS вместо jQuery для контоля его динамических HTML виджетов. Поэтому мы вынуждены переопределить значение по умолчанию следующей настройкой: CMSPLUGIN_CASCADE['bootstrap3']['template_basedir']

Более подробная информация об этих настройках содержится в разделе djangocms-cascade.

17.1.13. Полнотекстовый поиск

Если вы установили и запустили ElasticSearchEngine, то конифгурация Haystack будет выглядеть следующим образом:

HAYSTACK_CONNECTIONS = {
    'default': {
        'ENGINE': 'haystack.backends.elasticsearch_backend.ElasticsearchSearchEngine',
        'URL': 'http://localhost:9200/',
        'INDEX_NAME': 'my_prefix-en',
    },
}

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

HAYSTACK_CONNECTIONS = {
    ...
    'de': {
        'ENGINE': 'haystack.backends.elasticsearch_backend.ElasticsearchSearchEngine',
        'URL': 'http://localhost:9200/',
        'INDEX_NAME': 'my_prefix-de',
    }
}
HAYSTACK_ROUTERS = ('shop.search.routers.LanguageRouter',)

17.1.14. Другие различные настройки

Из соображений удобства и простоты использования имеет смысл обновлять изменение корзины только по истечении определенного времени бездействия. Эта конфигурация устанавливает 2500 миллисекунд:

SHOP_EDITCART_NG_MODEL_OPTIONS = "{updateOn: 'default blur', debounce: {'default': 2500, 'blur': 0}}"

Измените подклюённый путь к локальной директории, если вы не хотите загружать статику с CDN:

SELECT2_CSS = 'node_modules/select2/dist/css/select2.min.css'
SELECT2_JS = 'node_modules/select2/dist/js/select2.min.js'

Так как на стороне клиента не разрешается делать какие-либо ценовые и количественные расчеты, Decimal значения передаются клиенту с помощью строки. Это также позволяет избежать неприятных ошибок округления.

COERCE_DECIMAL_TO_STRING = True

Запрет на отображения всех переходов, настроенных с помощью workflow-миксинов внутри бэкенда администрирования:

FSM_ADMIN_FORCE_PERMIT = True

Оцените статью

0 из 5 (всего 0 оценок)

Поля, отмеченные звёздочкой ( * ) , являются обязательными.

Спасибо за ваш отзыв!

Автор перевода

Права на использование данной статьи, расположенной на настоящей странице http://vivazzi.ru/django-shop/configuration/:

Разрешается копировать статью с указанием её автора и ссылки на оригинал без использования параметра rel="nofollow" в теге <a>. Использование:

Автор статьи: Мальцев Артём
Ссылка на статью: <a href="http://vivazzi.ru/django-shop/configuration/">http://vivazzi.ru/django-shop/configuration/</a>

Подробнее: Правила использования сайта

Вам нужно саморазвиваться или вы хотите зарабатывать деньги?

Или вы ищите хорошие IT сервисы или книги? Сохраните свое время и взгляните на мою подборку рекомендаций, которыми постоянно пользуюсь.
Посмотреть рекомендации

Комментариев: 0

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

Чтобы оставить комментарий от своего имени войдите или зарегистрируйтесь обычным способом или через социальные сети:

Отправить

На данный момент нет специального поиска, поэтому я предлагаю воспользоваться обычной поисковой системой, например, Google, добавив "vivazzi" после своего запроса.

Попробуйте