Сегодня я решил немного поэкспериментировать с Python. Работать с декстоп-приложениями не так весело, потому я решил испытать какой-нибудь web-фреймворк. Пока размышлял, что выбрать, пришел к выводу, что для начала стоит попробовать Flask - такой вот микрофреймворк. А вместе с ним испытать плагин Flask-Github, предоставляющий авторизацию, а после позволяющий выполнять запросы к API.
Подготовка к работе
Сначала загрузим все необходимое:
|
|
Библиотеки работают на Python 3, потому мне не пришлось переключаться в IDE на Python 2.7. Следующим этапом нужно создать приложение в профиле GitHub, а оттуда забрать Client ID
и Client Secret
.
Каркас приложения
Теперь переходим непосредственно к коду. Инициализируем приложение, указываем маршруты:
|
|
В корне ('/'
) сайта мы будем предлагать ссылку на авторизацию ('/login'
), либо ссылку на просмотр информации о профиле ('/info'
). Мы используем декораторы, чтобы связать функцию и соответствующий маршрут.
Настройка
Далее нам нужно указать параметры приложения, полученые в профиле на GitHub:
|
|
Колбэк не забываем указать в профиле приложения. После всего нам нужно заняться модулем GitHub-Flask.
GitHub-Flask
После того, как мы указали в конфигурации Flask-приложения необходимые параметры, можно создать отдельное GitHub-приложение:
|
|
В маршруте /login
вызываем “авторизатор”:
|
|
Теперь конфигурируем колбэк:
|
|
В примерах, которые я разбирал, токен доступа для отдельного пользователя сохранялся в базу данных. Однако, так как я просто экспериментирую, мне достаточно сохранить токен одного единственного пользователя. На одного пользователя не жалко и глобальной переменной, хоть это и не очень красиво:
|
|
Если мы собираемся выполнять запросы к GitHub API, нам нужно реализовать функцию, которая будет получать токен доступа, который будет использовать при обмене с сервером:
|
|
Ну и напоследок, сделаем запрос на получение информации об авторизированном пользователе:
|
|
Вот и всё.
Заключение
Собственно все оказалось весьма просто и легко. Единственное, что немного разочаровало - запрос на авторизацию или запрос к API выполнялись весьма долго (несколько секунд). Может на реальном хосте все будет работать гораздо быстрее. С самой библиотекой в принципе разобрался, однако изучению несколько препятствовало наличие весьма малого количества знаний о Python. В данном случае знание базового синтаксиса недостаточно, необходимо иметь понятие об устройстве многих build-in библиотек.