@python_beginnersЭта группа больше не существует

Страница 1360 из 1885
John
08.03.2017
09:07:36
?

Проксимов
08.03.2017
09:22:01
import spasibo
ModuleNotFoundError: no module named "spasibo"

Dmitry
08.03.2017
09:22:37


в чем ошибка?

Google
Проксимов
08.03.2017
09:24:16
Ох ох

А где ошибка то?

Маришка
08.03.2017
09:25:34
А попробуй еще раз в foo после изменения get сделать

Dmitry
08.03.2017
09:26:16
success

мерси

Маришка
08.03.2017
09:27:11
Это было очевидно

Dmitry
08.03.2017
09:30:48


норм так?

или надо, наверное, в return token, token_exp возвращать.

Pavel
08.03.2017
09:40:25
а эти 14 минут - это всегда так будет? МОжет быть, лучше отлавливать когда запросы начнут получать отлуп от сервера, тогда получать новый токен и повторять запрос?

Dmitry
08.03.2017
09:41:18
можно еще раз в терминах "поиск в гугл" плиз)

b0g3r
08.03.2017
09:52:27
можно еще раз в терминах "поиск в гугл" плиз)
Отправляешь запросы с токеном, пока сервер не будет отвечать что токен кончился. Ловишь такой ответ, и делаешь новый токен

Как сервер отвечает что токен кончился - это уж надо тебе смотреть самому)

Google
Dmitry
08.03.2017
09:53:40
это легко сделать. Спасибо)

Один момент. Как это лучше реализовать? Есть куча функций, которые по апи с сврвером общаются. Токен они берут из переменной BIZ_TOKEN. Мы делаем запросы к серверу, допустим токен кончился и сервер возвращает нам 401. Прописывать проверку ответа сервера и вызов auth() в каждой функции я полагаю не верный ход мысли. Тогда как это сделать?

b0g3r
08.03.2017
09:59:00
Прописывать проверку кода ответа севера в каждом вызове - верный ход

Igor
08.03.2017
09:59:27
у requests еще есть raise_for_status()

Johnnie
08.03.2017
10:00:32
а зачем токен хранить в переменной окружения?

Dmitry
08.03.2017
10:01:04
а где его хранить?

Маришка
08.03.2017
10:02:32
.yaml ?

Dmitry
08.03.2017
10:03:29
лишний раз открывать и закрывать файл, чтобы получить токен?

Igor
08.03.2017
10:03:35
если это что-то, что меняется каждые 15 минут, то yaml - еще более херовый способ )

а SECRETS всякие через env vars часто передаются

Johnnie
08.03.2017
10:04:09
да хоть в самом скрипте, без сохранения куда-либо, потому что и так он тухнет каждые 15 минут

Igor
08.03.2017
10:04:26
ну, я так понимаю, что его еще надо передать при первом вызове скрипта

и вот тут как раз os.environ спасает, да но я б в отдельную переменную записал, если потом есть необходимость его перезапрашивать и перезаписывать, потому что os.environ['TOKEN'] = '...' это как-то странно

Маришка
08.03.2017
10:05:13
Dmitry
08.03.2017
10:06:22
получается надо запросить у сервера токен, записать в файл, потом из файла его получить)

А правильно ли будет сделать обертку api_call() которая будет принимать функцию на вход и в которой будет храниться токен и если что обовляться?

Igor
08.03.2017
10:07:56
а зачем? о_О

Dmitry
08.03.2017
10:08:02
функция - это собственно запрос к серверу

Igor
08.03.2017
10:08:06
мне кажется, тогда уж правильнее класс намутить

APIClient

Google
Dmitry
08.03.2017
10:09:40
я так и делал пока не устал. Потом решил попробовать без классов.

b0g3r
08.03.2017
10:23:59
Естественный процесс обучения

Sergey
08.03.2017
11:49:36
ребят оцените написал с утра https://github.com/heyyyoyy/beginning/blob/master/vk8.03.py

Janek
08.03.2017
11:50:41
круто

stonepig
08.03.2017
11:50:41
ребят оцените написал с утра https://github.com/heyyyoyy/beginning/blob/master/vk8.03.py
а если у меня двухфакторная аутентификация?

Janek
08.03.2017
11:50:46
продолжай в том же духе

Sergey
08.03.2017
11:51:20
а если у меня двухфакторная аутентификация?
А как это обходить я хз?если честно не нашёл

stonepig
08.03.2017
11:51:30
Sergey
08.03.2017
11:51:32
в доке есть :) посмотри
Спасибо) а в vk библиотеке это не реализовано скорее всего

stonepig
08.03.2017
11:52:30
https://vk.com/dev/authentication

stonepig
08.03.2017
11:53:16
https://vk.com/dev/auth_direct

во тут!

Anna
08.03.2017
11:53:23
ребят оцените написал с утра https://github.com/heyyyoyy/beginning/blob/master/vk8.03.py
а потом мне разгребать вот эти бездущные рассылочные поздравления

фу

stonepig
08.03.2017
11:53:29
Двухфакторная аутентификация Если Вы передали в запросе параметр 2fa_supported=1 и у пользователя включена двухфакторная аутентификация, на запрос с верными логином и паролем вернется ошибка need_validation со следующими полями: validation_type — тип подтверждения. Возможные значения: 2fa_sms — подтверждение через SMS; 2fa_app — подтверждение с помощью приложения для генерации кодов. phone_mask — маска номера телефона. Необходимо запросить у пользователя код подтверждения и повторно отправить запрос на авторизацию с дополнительным параметром code, содержащим код подтверждения. Если возникли проблемы с получением кода из приложения или пользователь не хочет использовать приложение для генерации кодов, Вы можете форсировать получение кода по SMS, повторно передав запрос авторизации с параметром force_sms=1.

Anna
08.03.2017
11:53:52
Google
stonepig
08.03.2017
11:53:56
а могла бы быть!

Anna
08.03.2017
11:54:15
ну, нет

stonepig
08.03.2017
11:54:33
нечего в девках всю жизнь ходить

Sergey
08.03.2017
11:54:47
Двухфакторная аутентификация Если Вы передали в запросе параметр 2fa_supported=1 и у пользователя включена двухфакторная аутентификация, на запрос с верными логином и паролем вернется ошибка need_validation со следующими полями: validation_type — тип подтверждения. Возможные значения: 2fa_sms — подтверждение через SMS; 2fa_app — подтверждение с помощью приложения для генерации кодов. phone_mask — маска номера телефона. Необходимо запросить у пользователя код подтверждения и повторно отправить запрос на авторизацию с дополнительным параметром code, содержащим код подтверждения. Если возникли проблемы с получением кода из приложения или пользователь не хочет использовать приложение для генерации кодов, Вы можете форсировать получение кода по SMS, повторно передав запрос авторизации с параметром force_sms=1.
Спасибо) попробую потом где нибудь уже с этим реализовать

Dmitry
08.03.2017
12:09:14
Разбираюсь с декораторами. Допустим будет так: @auth() def get_data(self): ... get_data() делает запрос к серверу. Соотв. ей нужен токен. Так как auth() будет выполняться непосредственно перед get_data(), то тогда я не понимаю как можно запихать туда ответ сервера, ведь он будет получен после выполнения тела функции)

Igor
08.03.2017
12:11:18
получается надо запросить у сервера токен, записать в файл, потом из файла его получить)

Ivan
08.03.2017
12:11:24
декоратор это просто функция которой ты передаешь декорируемый объект, в которой ты делаешь что хочешь, но еще внутри можешь использовать этот самый объект.

Igor
08.03.2017
12:11:26
тьфу, промазал

Admin
ERROR: S client not available

Igor
08.03.2017
12:11:36
А правильно ли будет сделать обертку api_call() которая будет принимать функцию на вход и в которой будет храниться токен и если что обовляться?

> в которой будет храниться токен и если что обновляться

декоратор - как раз место, в котором это имело бы смысл делать

как раз потому, что он выполняется перед функцией

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

другой вопрос в том, эффективно ли это

тебе посоветовали вместо того, чтобы самому палить каждые 15 минут, что токен не просрочен, палить это в момент попытки апи вызова

Dmitry
08.03.2017
12:13:36
это я уже понял. Просто павел писал, о реализации без проверки времени жизни токена, а просто отправлять запросы пока сервер не скажет, что токен уже не актуален и потом его обновлять

Igor
08.03.2017
12:13:37
если ты будешь юзать декоратор, получится, что отправляются лишние ывзовы, это не круто

ну, можно сделать так

функция будет кидать эксепшн, а декоратор будет ловвить, обновлять токен и перевызывать с нормальным токеном

Google
Igor
08.03.2017
12:14:38
это, наверное, будет наиболее верно хз че до меня сразу не дошло :)

Dmitry
08.03.2017
12:16:33
типа этого: def auth(): def check_status(): тут вызовем get_data() и вернем статус if status...

Igor
08.03.2017
12:17:17
аэы.. ну да, как вариант

только питоничнее эксепшены бросать в случае ошибок

Dmitry
08.03.2017
12:17:51
ok

Igor
08.03.2017
12:18:24
ok
в телеграме, если что, можно нажать "стрелку вверх" на клаве, чтобы быстро отредактировать последнее сообщение )

Dmitry
08.03.2017
12:19:20
буду знать)

Артемий
08.03.2017
12:29:13
Ребят, а есть чатик по django?

Igor
08.03.2017
12:29:37
пиши ему в личку, @django_python

пусть ник оправдывает

(шучу)

Stanislav
08.03.2017
12:29:58
Артемий
08.03.2017
12:30:19
Спс

Dmitry
08.03.2017
12:32:54




может кто знает как поправить?

Igor
08.03.2017
12:33:52
у тебя наверное http:// не указано в переменной

а

нет

Страница 1360 из 1885

Эта группа больше не существует Эта группа больше не существует