IT Блог

Документации и переводы

Статьи на технические темы

Авторизация через социальную сеть Вконтакте

Для того чтобы добавить на свой сайт авторизацию через социальную сеть Вконтакте, нужно создать своё приложение в этой соц. сети. Я по шагам опишу, как это делается на примере своего сайта vivazzi.pro.

На странице добавьте своё приложение аналогично скриншоту:

Далее, нужно вам будет выслан код для подтверждения регистрации нового приложения по смс. Получите код и подтвердите регистрацию:

После подтверждения вы можете увидеть свой ID приложения, а также защищённый ключ (секретный ключ), который понадобится для авторизации:

Включённый open API позволяет производить разные действия, в том числе вход и регистрацию пользователей на своём сайте.

Для авторизации пользователей на сайте введите Адрес сайта...


Группировка данных в зависимости от выбранного интервала времени в highstock

Как оказалась, в графиках highstock не особо гибкая настройка группировки точек в зависимости от просматриваемого интервала времени. Да, данные могут группироваться, если их очень много (более тысячи) в некотором выбранном отрезке времени. Но когда это произойдёт, точно не понятно.

Настройку группировки вы можете осуществить через параметр plotOptions.series.dataGrouping.units (), например:

Highcharts.stockChart('chart', {

    plotOptions: {
        series: {
            dataGrouping: {
                forced: true,
                units: units: [[ 'week', [1] ], ]
            },
        }
    },

    ...
});

Но здесь не указывается при каком временном определённом интервале следует выполнять соответствующую группировку (по неделям, месяцам и т. д.).

Для моего графика посещаемости этого сайта (который находится на...


Создать tar

Создание архива tar

tar -cvf file.tar /path/to/file_or_folder/   # создать .tar

С форматами .tar.gz и .tar.bz2 применяется ещё и сжатие:

tar -czvf file.tar.gz /path/to/file_or_folder/   # создать .tar.gz (популярный)
tar -cjvf file.tar.bz2 /path/to/file_or_folder/   # создать .tar.bz2

Распаковка архива .tar

tar -xvf file.tar.gz

Ключи команды tar

-c - создание архива
-v - подробный список обрабатываемых файлов
-f - работа с файлом
-z - сжатие архива с помощью gzip
-j - сжатие архива с помощью bzip2
-x - извлечение файлов из архива
-C - переход в каталог (см. подробности ниже)

Тонкости архивации

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


Разработка социальной сети Levels

Уважаемые читатели!

Рад представить свой новый проект Levels -

Levels - это социальная сеть для спортсменов и людей, ведущих активный и здоровый образ жизни. Цели проекта - создать платформу, где люди могли бы почитать интересные статьи о здоровье и мотивации, посмотреть приготовление разнообразных блюд, составить план тренировок и питания, а также пообщаться с другими людьми, которые тоже ведут правильный образ жизни. В целом я хочу вдохновить людей повышать свою жизненную энергию, благодаря развитию тела и духа, правильному питанию, постановке положительных мыслей и так далее. Более подробно о проекте можно почитать на странице

Здесь же, в техническом разделе блога я буду...


django-parler Check fields/fieldsets/exclude attributes of class Admin

Долго не мог понять почему Django выдаёт мне ошибку при попытке прикрутить django-parler:

Unknown field(s) (my_trans_field) specified for MyModel. Check fields/fieldsets/exclude attributes of class MyModelAdmin.

Ключевой момент в том, что в админ-классе у меня был определена переменная form:

@admin.register(MyModel)
class MyModelAdmin(TranslatableAdmin):
    form = MyModelForm

    fieldsets = (
        (None, {
            'fields': ('field_1', 'field_2'),
        }),
        (_('Translatable Fields'), {
            'fields': ('my_trans_field', )
        }),
    )

И, как оказалось, класс MyModelForm нужно тоже наследовать от специфического класса TranslatableModelForm приложения parler:

class MyModelForm(TranslatableModelForm):
    custom_field = forms.DateTimeField(label='Custom Field', required=False)

    class Media:
        css = {'all': ['spec/css/custom_styles.css', ]}

Теперь всё заработало, и я вижу поле my_trans_field...


Как добавить страницу в админку django

Добавление своей страницы в админку django мало чем отличается от добавления страницы в публичную часть сайта и осуществляется за несколько простых шагов. Но для начала создадим новое приложение spec в нашем проекте со следующей структурой:

my_project
├─ spec
│  ├─ templates
│  │  └─ admin_custom_page.html
│  ├─ __init__.py
│  ├─ urls.py
│  └─ views.py
├─ __init__.py
├─ settings.py
└─ urls.py

А затем добавим в settings.py наше приложение spec:

INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'django.contrib.admin',
    'django.contrib.sitemaps',

    'djangocms_text_ckeditor',

    'cms',
    'treebeard',
    'menus',
    'sekizai',

    'spec',
)

1. Создания представления

Пишем обычное представление в views.py, добавляя необходимую логику, к...


Сортировка по полю в django admin

Для сортировки по полю в админке Django в списке объектов используется свойство admin_order_field.

Пример сортировки продуктов по их доступности (активности) в списке всех продуктов:

@admin.register(ProductActivate)
class ProductActivateAdmin(admin.ModelAdmin):
    list_display = ('product', 'publication_date', 'activation_applied', 'active')
    ordering = ('product__active', 'publication_date')

    def active(self, obj):
        return obj.product.active
    active.short_description = 'Активен продукт?'
    active.admin_order_field = 'product__active'
    active.boolean = True


Установка и запуск ElasticSearch

Так как Elasticsearch написан на Java, то сначала нужно установить соответствующее виртуальное окружение JRE:

sudo apt-get update
sudo apt-get install openjdk-7-jre

Elasticsearch можно загрузить с официального сайта:

На данный момент я использую elasticsearch версии 2.2.0:

cd /opt/
wget https://download.elastic.co/elasticsearch/elasticsearch/elasticsearch-2.2.0.deb
dpkg -i elasticsearch-2.2.0.deb

Запуск elasticsearch осуществляется командой:

service elasticsearch start

Как правило, elasticsearch добавляют в автозапуск linux, поэтому сначала откроем файл с командами на автозапуск:

nano /etc/init.d/local

А затем добавим:

#! /bin/sh
...
service elasticsearch start

Настраиваем файл /etc/init.d/local на автозагрузку:

sudo chmod +x /etc/init.d/local # делаем файл исполняемым
sudo update-rc.d local defaults 80 # добавляем скрипт /etc/init.d/local в автозагрузку...

html_content с вложениями в django-post_office

Обнаружил странную проблему при прикреплении файла в django-post-office (по крайней мере это наблюдается в версии 2.0.8 и ниже): когда посылаешь письмо, состоящее из html-контента с прикреплением любого файла (неважно какого формата), то письмо приходит, но без прикрепленного файла.

Использовались версии пакетов:

django==1.10.7 (и ниже)
django-post-office==2.0.8 (и ниже)

Более подробно поведение django-post-office указанной версии и работу функции mail.send() можно описать так:

  1. Посылаешь письмо с обычным содержанием, используя параметр message, и прикрепляешь файл - работает правильно, т. е. видим и текст письма и вложение.
  2. Посылаешь письмо с содержанием, содержащее html-теги или даже обычный текст без тегов, используя параметр html_message, и...

Определить, какой режим установлен в django-cms

Чтобы определить, какой на данный момент стоит режим просмотра страницы или его редактирования, можно воспользоваться переменной request.toolbar.edit_mode.

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

{% if request.toolbar.edit_mode %}
    <div class="debug_panel">...</div>
{% endif %}
Примечание
Можно использовать и переменную request.current_page.publisher_is_draft, но в этом случае не всегда можно точно определить, в каком режиме вы находитесь request.toolbar.edit_mode, например, если вы находитесь на странице вашего созданного приложения.

Представляю вашему вниманию книгу, написанную моим близким другом Максимом Макуриным: Секреты эффективного управления ассортиментом.

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

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

Попробуйте

Выберите валюту для отображения денежных единиц