Сериализация объектов в Джанго предоставляет механизм преобразования моделей в другие форматы.
Выполняется простой операцией:
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() сохранит объекты в базу.
Может протребоваться выполнить валидации …
Читать далее
Для добавления аутентификации воспользуемся библиотекой
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: dumpdata и loaddata.
./manage.py dumpdata
выведет все данные приложений из INSTALLED APPS.
./manage.py loaddata db.json
загрузит фикстуры (дамп базы данных).
Иногда может потребоваться наполнить базу данными при первоначальном сетапе приложения. Данные могут быть предоставлены в миграциях или фикстурах.
Фикстуры
Во-первых, укажем в настройках директорию (по умолчанию Джанго ищет фикстуры в папке fixtures внутри приложения):
FIXTURE_DIRS = (
'path/app/my_fixtures/',
)
Сделаем дамп базы командой
./manage.py dumpdata
Очистим таблицы и применим миграции
./manage.py …
Читать далее
Добавляем в модель метод delete:
def delete(self, *args, **kwargs):
storage, path = self.file.storage, self.file.path
super(Post, self).delete(*args, **kwargs)
storage.delete(path)
Читать далее
В 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/
Читать далее