Copy
Войти о платить.
View this email in your browser

Авторизация через социальные сети

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

Я предлагаю использовать наиболее популярный модуль python-social-auth, который ранее назывался django-social-auth. Вообще, если вам нужен какой-либо более менее стандартный механизм, он скорее всего уже реализован в виде приложения под Django (смотрите awesome-django).

Лучше использовать стандарт OAuth2, так как он популярнее и проще.

Я сделаю авторизацию только через VK. Подключение других сетей через OAuth2 не отличается.

Смотрите репозиторий демо-проекта и его коммиты, чтобы не забыть все важные части.

Установите python-social-auth и django-paypal и следуйте инструкциям.


Общая часть для всех бэкендов

1. Добавьте 'social.apps.django_app.default' в INSTALLED_APPS
После этого запустите миграции этого приложения: python manage.py migrate

2. Добавьте бекенды авторизации
В настройки добавьте кортеж:

AUTHENTICATION_BACKENDS = (
    'social.backends.vk.VKOAuth2',
    'django.contrib.auth.backends.ModelBackend',
)

3. Добавьте адреса приложения
В основной urls.py:

url('', include(social.apps.django_app.urls, namespace='social')),

И адресаы, которые будут использоваться в процессе авторизации

url(r'^accounts/logout/$', socshop.views.account_logout, name='logout'),
url(r'^accounts/login/$', socshop.views.home, name='login'),
url(r'^accounts/profile/$', socshop.views.account_profile, name='profile'),


4. Добавить простые контроллеры.

  • /accounts/logout/ - вызывает стандартную функцию разлогинивания django.contrib.auth.logout
  • /accounts/profile/ - показывает информацию, доступную только залогиненному пользователю. Это требование реализовано с помощью декоратора @login_required (то есть прежде чем request передается методу, сервер проверяет, что объект user является авторизованным)
  • На домашней странице в зависимости от состояния пользователя (авторизован или нет) показываем ссылку на авторизацию или кнопку выйти.

Авторизация через VK

1. Добавьте новое приложение. Укажите, что это будет веб-сайт.
Если вы будете запускать приложение локально, то укажите параметры так:

  • Site address: http://localhost:8000
  • Base domain: localhost

После этого нужно подтвердить создание приложения через приложение на телефоне или SMS.

2. Переходите в настройки созданного приложения.
Сохраните параметры Application ID и Secure key у себя в проекте в файле local_settings.py в той же папке, где лежит обычный settings.py. Важно, что эти параметры являются приватными и их не следует добавлять в репозиторий. Поэтому импортируйте в обычные настройки локальные (from .local_settings import *) но не добавляйте его в коммиты или добавьте в .gitignore.

local_settings.py:

SOCIAL_AUTH_VK_OAUTH2_KEY = ''
SOCIAL_AUTH_VK_OAUTH2_SECRET = ''

После этого приложение должно работать. Смотрите, какие запросы получает ваше приложение. API контакта может тормозить для новых приложений, поэтому, если вы получаете что-то ошибочное (не 200 и 302), то попробуйте отправить запрос снова.

Материалы

Коммит в демо-проекте.

Ссылки на важную документацию:

 

Оплата через PayPal

PayPal очень популярен за счет простого API. Фактически, можно добавить кнопки на статический HTML-сайт делегировав функции корзины PayPal. Однако, в будущем вы скорее всего захотите подключить другие способы оплаты, чтобы снизить комиссию за переводы, поэтому корзину лучше сделать независимой от способа оплаты.

Кстати, если вы не слышали, существует термин "мафия PayPal", объединяющий бывших сотрудников компании, которые в дальнейшем основали свои успешные компании. О подходе к ведению бизнеса и разработки в PayPal и этих компаниях можно почитать в книге Питера Тиля Zero to One.
 

Как подключить оплату

1. Регистрируйтесь в песочнице. Вы получите два аккаунта: для бизнеса (который будет получать деньги) и персональный (который будет отправлять).

2. PayPal щедро одаривает тестовыми электронными деньгами: $10,000.00 USD (можно запросить еще, когда вы потратите эти).
Переходите в dashboard -> sandbox -> accounts Посмотрите профиль своего бизнес-аккаунта. Эти параметры добавьте в свой local_settings.py:

PAYPAL_TEST = True
PAYPAL_WPP_USER = ""
PAYPAL_WPP_PASSWORD = ""
PAYPAL_WPP_SIGNATURE = ""

3. Подключите приложение 'paypal.standard.ipn' в свой список INSTALLED_APPS. И запустите миграцию.

4. Добавьте в urls.py адреса приложения и ваши обработчики:

url(r'^payment/cart/$', socshop.views.paypal_pay, name='cart'),
url(r'^payment/success/$', socshop.views.paypal_success, name='success'),
url(r'^paypal/', include(paypal.standard.ipn.urls)),


5. Далее опишите контроллеры:

  • paypal_pay - формирует запрос, в котором указывается наименование покупки, цена, валюта, номер счета, дополнительные поля (в custom можно, например, передать идентификатор или имя пользователя).
  • paypal_success - страница, которая будет запрошена в случае успешной оплаты. В нее передается POST-запрос, но так как в целях безопасности django-приложение не принимает POST-запросы без csrf-токена, нужно обернуть контроллер в декоратор @csrf_exempt.

6. Добавьте шаблон (payment.html), в котором будет генерироваться счет и форма для оплаты (она выглядит как кнопка перехода на сайт PayPal с множеством hidden-полей, в которых передается информация об оплате).


Материалы

Коммит в демо-проекте.

Ссылки на важную документацию:


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

Успехов вам в ваших проектах!

Я надеюсь, что этой инструкцией ответил на несколько писем о том, что и как делать дальше. Но если ваша проблема всё еще актуальна, то напишите, пожалуйста, об этом ответом на свое письмо.
Sincerely yours,
Ivan Savin

Want to change how you receive these emails?
You can update your preferences or unsubscribe from this list