Тихо, тихо… обо всем

DRY запросы для моделей Django

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

from django.db import models


class Artist(models.Model):
    first_name = models.CharField(max_length=50)
    last_name = models.CharField(max_length=50)


class Album(models.Model):
    name = models.CharField(max_length=50)
    release_date = models.DateField()


class Song(models.Model):
    artists = models.ManyToManyField(Artist)
    albums = models.ManyToManyField(Album)
    name = models.CharField(max_length=100)
    release_date = models.DateField()

Вы можете заметить, что получить информацию об исполнителях той или иной песни не просто. Предположим, нам надо получить всех исполнителей в альбоме «Lion King». Для этого вам надо выполнить следующее:

Portfolio: 12volt.lv

http://12volt.lv

Официальный дистрибьютор ведущих мировых производителей автомобильных аудио систем в Латвии.

Технологии: Php, Yii, Mysql.

Декоратор для логирования исключений

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

Полезные Javascript функции и приемы

Полезные Javascript функции и приемы

Решил собрать в одном месте часто используемые функции и приемы Javascript, которые применяются при создании сайтов. Большинство из них в той или иной мере относятся к популярной библиотеке jQuery, но есть и на чистом Javascript.

Простые советы по ускорению тестов Django

TDD (Test Driven Development) полезная и удобная практика для написания качественного кода. Согласно ей вы не можете писать код, не написав предварительно тесты для него.

При TDD тесты должны запускаться как можно чаще и, следовательно, они должны отрабатывать как можно быстрее, чтоб исключить пустую потерю времени на ожидание.

В данном посте я перечислю некоторые приемы, которые помогут вам значительно ускорить выполнение тестов Django. На момент написания статьи выполнение набора из 250 тестов занимало около 5 секунд, по сравнению 50 секундами на выполнения тех же тестов, но еще не оптимизированых. Т.е. это в 10 раз быстрее.

Django: модели, инкапсуляция и целостность данных

В процессе разработки больших приложений на Django мы заметили, что модели не имеют никакой реальной инкапсуляции данных. По мере увеличения объема кода становится сложно давать какие-либо железные гарантии того, что вы на самом деле обеспечиваете целостность данных на уровне приложения.

Portfolio: Mystra.ru

МИСТРА Инжиниринг

Акционерное общество «Мистра» - разработка и производство медицинского оборудования.

Технологии: Php, Yii, Mysql.

React JS: Загрузка файла на сервер

Продолжаем заметки про React JS. Сегодня речь о том, как загрузить на сервер файл вместе с кучей другой информации.

В интернете в основном описывается способ загрузки только одного файла. Поэтому себе в заметку как отправить одновременно и файл и данные. Для этого нужно использовать класс FormData, в который добавляется объект файла и данные.

React JS: событие onChange и автокомплит в Safari

В замечательном Javascript фреймворке React, кроме множества плюсов, есть один неожиданный и неприятный минус. Если при заполнении поля ввода используется автокомплит браузера Safari, то событие onChange не срабатывает. Например в коде:

render: function() {
    return (
        <input type="text" value={this.state.value} onChange={this.onInputChange} />
    );
}

метод this.onInputChange не будет вызван, если пользователь при вводе в текстовое поле выберет значение из автокомпликта браузера Safari.

Одно из решений, которое встречается в интернете - это использование refs ссылок. Но у меня он не сработал. В моем случае помогло использование onBlur события.

...
render: function() {
    return (
        <input type="text" value={this.state.value} onChange={this.onInputChange} onBlur={this.onInputChange} />
    );
}