Vk backend что это

По рекомендации пользователей сайта начал добавлять авторизацию через социальные сети на сайт. Первой такой социальной сетью стала ВКонтакте, как наиболее популярная социальная сеть у пользователей моего сайта. Django сам по себе имеет необходимый функционал по работе с протоколом OAuth 2.0, который мог используется в API ВКонтакте для авторизации пользователей на сторонних ресурсах (и не только для авторизации). Но в данном случае я не стал писать свой велосипед, используя голую поддержку OAuth в Django, а нашёл очень хорошую батарейку, которая пожалуй достаточно известна среди разработчиков сайтов на Django, которая позволила внедрить авторизацию через ВКонтакте всего за пару часов. Эта батарейка называется Python Social Auth Django . Давайте пошагово разберёмся, что нам нужно сделать, чтобы подключить авторизацию через ВКонтакте на сайт с Django

Шаг 1 — Установка Python Social Auth Django

Делается это одной командой в вашем виртуальном окружении через утилиту pip

VK Tech | Lessons — «Бэкенд», Алексей Акулович


pip install social-auth-app-django

В документации предлагается при конфигурировании два вариант ORM для работы системы аутентификации через социальные сети. Это классическая ОРМ Django и ОРМ MongoEngine, но так получилось, что требуемый для MongoEngine пакет устарел и немного несовместим с последними версиями Django, просто не работает, даже в документации разработчиков mongoengine висит призыв о помощи с поддержкой утилиты. Поэтому будем настраивать только для классической ОРМ.

Шаг 2 — Регистрация батарейки на вашем сайте

Прописываем приложение аутентификации в INSTALLED_APPS

INSTALLED_APPS = ( . ‘social_django’, . )

Шаг 3 — Миграция базы данных

Вам потребуется применить изменения в структуре базы данных, поскольку данная батарейка имеет свои таблицы для работы с авторизацией пользователей.

./manage.py migrate

Далее последуем ещё одной рекомендации по настройке базы данных, если Вы, как и я, используете PostgreSQL. А именно. При использовании PostgreSQL рекомендуется использовать встроенное поле JSONB для хранения извлеченных дополнительных_данных. Чтобы включить его, задайте настройку:

SOCIAL_AUTH_POSTGRES_JSONFIELD = True

Шаг 4 — Настройка бекендов аутентификации

Также прописываем в settings.py
AUTHENTICATION_BACKENDS = ( ‘social_core.backends.vk.VKOAuth2’, # бекенд авторизации через ВКонтакте ‘django.contrib.auth.backends.ModelBackend’, # бекенд классической аутентификации, чтобы работала авторизация через обычный логин и пароль )

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

Шаг 5 — Настройка процессора шаблонов

У меня за полтора года разработки данного сайта настройка TEMPLATES осталась практически нетронутой, но я добавил одну строку для этой батарейки

TEMPLATES = [ < ‘BACKEND’: ‘django.template.backends.django.DjangoTemplates’, ‘DIRS’: [], ‘APP_DIRS’: True, ‘OPTIONS’: < ‘context_processors’: [ ‘django.template.context_processors.debug’, ‘django.template.context_processors.request’, ‘django.contrib.auth.context_processors.auth’, ‘django.contrib.messages.context_processors.messages’, ‘social_django.context_processors.backends’, # Добавил эту строку ], >, >, ]

Шаг 6 — Настройка ключей для ВКонтакте

Здесь дана настройка секретных ключей для ВКонтакте
SOCIAL_AUTH_VK_OAUTH2_KEY = ‘XXXXXXX’ SOCIAL_AUTH_VK_OAUTH2_SECRET = ‘XXXXXXXXXXXXXXXXXXXX’

Чтобы их получить, нужно создать в инструментарии разработчика ВКонтакте приложение и взять ID вашего приложения и секретный ключ для него. Регистрируем приложение Заходим в его настройки и видим всё, что нужно В итоге прописываем в данные переменные следующие настройки

Что такое Backend?


SOCIAL_AUTH_VK_OAUTH2_KEY = ‘ID приложения’ SOCIAL_AUTH_VK_OAUTH2_SECRET = ‘Защищённый ключ’

Шаг 7 — Подключение маршрутов для авторизации в urls.py

Делается это так
urlpatterns = [ . path(», include(‘social_django.urls’)), ]

Шаг 8 — Добавление ссылки на маршрут

А теперь добавим ссылочку на маршрут где-нибудь в шаблоне, чтобы запускать авторизацию через ВКонтакте

Шаг 9 — Настройка редиректа при авторизации

Это необязательная настройка, которая укажет URL для перенаправления пользователя на вашем страницы после успешной авторизации. Оставим корень сайта

LOGIN_REDIRECT_URL = ‘/’

Там уже разберётесь, как вам лучше будет сделать

Шаг 10 — Запрос разрешений на получение доступа к email

У меня на сайте используется своя система рассылки сообщений уведомлений по почте, поэтому мне важно иметь доступ к email пользователю, чтобы уведомлять его о новых событиях на ресурсе, поэтому добавим запрос на получение доступа к email.

SOCIAL_AUTH_VK_OAUTH2_SCOPE = [’email’]

Для Django рекомендую VDS-хостинг TIMEWEB

Рекомендуем хостинг TIMEWEB

Рекомендуем хостинг TIMEWEB

Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.

  • Django — Урок 048. Как добавить статус онлайн на сайте
  • Django — Урок 047. Как сделать select_related и prefetch_related для аутентифицированного пользователя
  • Django — Урок 040. Как добавить аутентификацию через социальные сети. Facebook
  • Django — Урок 037. Как добавить аутентификацию через социальные сети. Google+
  • Django — Урок 009. Иконки социальных сетей «Поделиться» без JavaScript

По статье задано2 вопрос(ов)

Подписка на обсуждение 18
Подписка на раздел 169

Вам это нравится? Поделитесь в социальных сетях!

Источник: evileg.com

ВКонтакте проводит конкурс для бэкенд/full-stack разработчиков

Сообщество VK Tech анонсировало конкурс для бэкенд-разработчиков. Принять в нём участие можно как в одиночку, так и командой из двух человек (фронтенд и бэкенд).

Что нужно делать?

  • В системе есть заказчики и исполнители. Заказчик публикует заказ и указывает его стоимость.
  • Исполнитель видит список заказов, доступных для исполнения.
  • Исполнитель выбирает заказ для выполнения, при этом исполнителю на счёт зачисляется стоимость заказа за вычетом комиссии системы.
  • У одного заказа может быть только один исполнитель. Если заказ выполнен, он исчезает из списка.

С полным списком требований можно ознакомиться на специальной страничке.

Что мне за это будет?

ВКонтакте обещает вот такие призы:

  • Первое место — 150 000 руб.
  • Второе место — 100 000 руб.
  • Поощрительные призы по 25 000 руб.

Ну а авторы лучших решений получат шанс присоединиться к Команде ВКонтакте.

Прислать свою работу на конкурс можно до 31 августа. Результат нужно отправить в сообщения сообщества VK Tech. Прикрепите к своему сообщению ссылку на GitHub (если репозиторий закрытый, пригласите в него пользователя seriousbackend) и развёрнутое демо. Укажите, написан ли код индивидуально или в составе команды.

Источник: tproger.ru

VK.com как бэкенд: подводные камни. Решаем проблемы по заявкам читателей

В прошлых статьях (раз и два) была описана разработка мобильного приложения со всеми любимым VK в роли бесплатного и услужливого сервера. Как это часто случается со всякими хитровыкрученными системами, рано или поздно они обрастают мелкими, но досадными проблемами, затрудняющими их использование. И как только это случается, журнал «Хакер» снова приходит на помощь :).

Версия VK API

При вызове какого-либо метода нужно специально указывать версию API в параметре v — например, последнюю v=5.53 . Иначе по умолчанию он ответит тебе версией, созданной еще при Дурове, а именно 3.0. Ее поддержку оставляют из-за очень старых программ, написанных давно, но работающих по сей день. Проблема с версией заключается в разных JSON-ответах сервера. Чтобы не встретиться с новой структурой при работе с методом wall.get , принудительно указывай версию и еще на всякий пожарный — число записей (count). Так API будет вести себя более предсказуемо.

Не забудь про версию API

Другие статьи в выпуске:

Xakep #214. Приручаем WAF’ы

  • Содержание выпуска
  • Подписка на «Хакер» -60%

Хранение записей со стены

Чтобы получить все записи со стены группы и иметь возможность обновлять данные, проще всего каждый раз выкачивать все записи со стены последовательно. Метод wall.get отдает данные с конца стены; используя смещение (offset), можно добраться до конца. Полное количество записей известно из переменной count ответа.

Каждую запись проще хранить в классе. Вот пример:

public class ProductStore implements Serializable, Comparable < private String id; private String category; private String subcategory; private String name; private String price; private String annotation; private String storeName; private String address; private String photo; private boolean selected; private Date startDate, endDate;

Он реализует два интерфейса: Serializable и Comparable. Первый используется для возможности сохранения всей его структуры целиком как строки в SharedPreferences, а второй — для упорядочивания списка по id . Его реализация:

Для обновления записей я каждый раз удаляю старую запись из списка (List

) и добавляю новую:

mProdList.remove(ps); mProdList.add(ps);

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

Когда нужно поработать со всем массивом, я запускаю сортировку:

Collections.sort(mProdList);

Загрузка картинок

Для загрузки картинок могут использоваться разные библиотеки: Fresco, Picasso, Universal Image Loader. Я использую Glide, поскольку он поддерживает GIF. Кому-то важна стабильность работы библиотеки, кому-то размер (в том числе количество методов).

Я в работе столкнулся со странным поведением Glide при загрузке большого количества картинок в списках: картинки загружались хаотично, а некоторые вообще не отображались.

Поймать ошибку помог слушатель ответов загрузки. Устанавливается он так:

В лог тут же свалилось

Exception java.net.SocketTimeoutException: timeout

Диагноз ясен: мобильная сеть плохо получает данные с VK с помощью стандартного компонента работы с сетью.

Выход был в использовании компонента okhttp3. Для его использования нужно просто прописать его в Gradle:

Glide сам его подхватит при компиляции и будет использовать. Так стали загружаться все картинки, даже на самой плохой мобильной сети.

Продвинутая работа с Glide

Эта библиотека поддерживает загрузку эскизов изображений. Например, мы можем получить миниатюру GIF-файла и показать ее пользователю, пока загружается основной файл. Нам только нужно знать URL для загрузки картинки.VK API имеет для этого свойство thumb у объекта doc.

Добавить в объект записи новое поле, думаю, не составит особого труда, так как он был подробно описан в предыдущих статьях. Теперь нам нужно сделать предзапрос и его результат передать в основную загрузку. Glide сам заменит эскиз на основной документ после его загрузки.

// Запрос на картинку эскиза DrawableRequestBuilder thumbnailRequest = Glide .with(context) .load(item.getThumb()); // Основная загрузка Glide.with(catsViewHolder.image.getContext()) .load(item.getThumb()) .diskCacheStrategy(DiskCacheStrategy.SOURCE) .thumbnail(thumbnailRequest) .into(catsViewHolder.image);

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

По рекомендации Балбеса из известного фильма, для тестов с загрузкой я использую кошек.

Тренироваться лучше на кошках

Получение аватара пользователя

При использовании vk-android-sdk первым делом проверяем, залогинился ли пользователь VKSdk.isLoggedIn. Если да, то нужно запустить метод VKApi.users().get() с дополнительными полями photo_50, photo_100, photo_200 . Если он не вернет нам в поле заглушку вроде -http://vk.com/images/camera_a.gif , то мы получим от него аватар в разрешении 50 х 50,100 х 100 или 200 х 200. Зависит это от самого аватара пользователя, раньше можно было загрузить и совсем маленькую картинку.

Вот метод, устанавливающий фото и имя пользователя в ImageView и TextView соответственно:

Еще не конец!

Вместо заключения хочу отметить, что бесплатный VK-бэкенд хорош в использовании, но несет с собой много трудностей. С нашим журналом ты узнаешь о большинстве из них и всегда будешь готов к праведной борьбе за торжество программерской мысли :).

Источник: xakep.ru

Рейтинг
( Пока оценок нет )
Загрузка ...