Экспорт и импорт данных в 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() сохранит объекты в базу.

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

Как добавить 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

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 …

Читать далее

Django - удаление файла с диска

12 апреля 2018 г. 16:21
Добавляем в модель метод delete:
def delete(self, *args, **kwargs):
storage, path = self.file.storage, self.file.path
super(Post, self).delete(*args, **kwargs)
storage.delete(path)

Читать далее

Статические файлы в Django

12 апреля 2018 г. 15:55
В settings.py определяем переменную STATIC_ROOT, указываем полный абсолютный путь к директории со статическими файлами.:
STATIC_ROOT = "/home/myusername/myproject/static"
Выполняем команду collectstatic, которая собирает статические файлы из всех приложений и копирует их в STATIC_ROOT:
./manage.py collectstatic
Также мы можем изменить переменную STATIC_URL в settings.py
STATIC_URL = '/static/'

https://docs.djangoproject.com/en/dev/howto/static-files/
Читать далее