Экспорт и импорт данных в Django ч.2: сериализация

22 декабря 2018 г. 22:50
Сериализация объектов в Джанго предоставляет механизм преобразования моделей в другие форматы.
Выполняется простой операцией:

from django.core import serializers
data = serializers.serialize("xml", SomeModel.objects.all())

В функцию serialize передаются формат (поддерживается xml, json и yaml) и QuerySet.

Можно указать поля в аргументе fields:

from django.core import serializers
data = serializers.serialize('xml', SomeModel.objects.all(), fields=('name','size'))

Десериализация также является очень простой операцией:

for obj in serializers.deserialize("xml", data):
do_something_with(obj)

При этом возвращаются не обычные объекты Джанго, а экземпляры DeserializedObject.
DeserializedObject.save() сохранит объекты в базу.

Может протребоваться выполнить валидации …
Читать далее

PostgreSQL: создание пользователя, базы данных и прав доступа

8 июля 2018 г. 10:25
По умолчанию создается суперпользователь postgres. С помощью следующей команды зайдем в режиме администртора
$ sudo -u postgres psql

Добавление новой учетной записи
$ sudo -u postgres createuser username

Создание базы данных
$ sudo -u postgres createdb dbname

Задать пароль для пользователя
$ sudo -u postgres psql
psql=# alter user username with encrypted password 'password';

Дать права на работу с базой данных
psql=# grant all privileges on database dbname to username ;

Эти действия можно произвести и внутри psql с помощью …
Читать далее

Как добавить Google OAuth в Django

27 июня 2018 г. 10:18
Для добавления аутентификации воспользуемся библиотекой Python Social Auth

Выполняем установку
$ pip install social-auth-app-django

Добавим ‘social_django’ в INSTALLED_APPS, после чего выполним миграцию
python manage.py migrate

Добавим желаемые бекенды

AUTHENTICATION_BACKENDS = (
'social_core.backends.open_id.OpenIdAuth',
'social_core.backends.google.GoogleOpenId',
'social_core.backends.google.GoogleOAuth2',
'social_core.backends.google.GoogleOAuth',
'social_core.backends.twitter.TwitterOAuth',
'social_core.backends.yahoo.YahooOpenId',
...
'django.contrib.auth.backends.ModelBackend',
)

В нашем случае это 'social_core.backends.google.GoogleOAuth'. Не следует забывать про 'django.contrib.auth.backends.ModelBackend', иначе пользователи не смогут входить через встроенную систему аутентификации.

Добавим контекстные процессоры в settings.py

TEMPLATES = [
{
...
'OPTIONS': {
...
'context_processors': [
...
'social_django.context_processors.backends',
'social_django.context_processors.login_redirect',
...
]
} …

Читать далее

Тестирование django проекта с использованием coverage.py

23 июня 2018 г. 12:26
Coverage - инструмент, позволяющий оценить степерь покрытия кода тестами.

Устанавливаем coverage:
pip install coverage

Запускаем тесты:
coverage run manage.py test

Можно указать директорию проекта и шаблон для исключения (например, директории venv)
coverage run --source='.' --omit='venv/*' manage.py test

Формируем отчеты:
coverage report -m

Формируем отчеты html:
 coverage html
По умолчанию они будут помещены в html_cov/index.html
Html отчеты в более удобном виде показывают, какие строки кода были исполнены во время тестирования и какие нет.
Читать далее

Экспорт и импорт данных в Django

21 июня 2018 г. 9:52
Быстрый способ передать данные - воспользоваться встроенными средствами Django: dumpdata и loaddata.
./manage.py dumpdata
выведет все данные приложений из INSTALLED APPS.
./manage.py loaddata db.json
загрузит фикстуры (дамп базы данных).

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

Фикстуры

Во-первых, укажем в настройках директорию (по умолчанию Джанго ищет фикстуры в папке fixtures внутри приложения):
FIXTURE_DIRS = (
'path/app/my_fixtures/',
)
Сделаем дамп базы командой
./manage.py dumpdata
Очистим таблицы и применим миграции
./manage.py …

Читать далее