#django #oauth-2.0 #ringcentral
#django #oauth-2.0 #ringcentral
Вопрос:
Я работаю через приложение быстрого запуска потока авторизации RingCentral, используя Django. Для этого потребовалось внести несколько изменений в предоставленный код Flask, но большая часть потока работает. Страница индекса отправляет меня на RingCentral login, который затем отправляет меня обратно на тестовую страницу, как и должно быть. Но когда я нажимаю на любую из трех ссылок на этой странице, я получаю ту же ошибку:
AttributeError at /test/
'bytes' object has no attribute 'get'
Вот представление Django, которое обрабатывает тестовую страницу (слегка изменено по сравнению с предоставленным кодом Flask):
def test(request):
platform = SyncConfig.rcsdk.platform()
platform.auth().set_data(request.session['sessionAccessToken'])
if platform.logged_in() == False:
return index(request)
api = request.GET.get('api')
if api == "extension":
resp = platform.get("/restapi/v1.0/account/~/extension")
return resp.response()._content
elif api == "extension-call-log":
resp = platform.get("/restapi/v1.0/account/~/extension/~/call-log")
return resp.response()._content
elif api == "account-call-log":
resp = platform.get("/restapi/v1.0/account/~/call-log")
return resp.response()._content
else:
return render(request, 'sync/test.html')
И sync/test.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
</head>
<body>
<b><a href="/logout">Logout</a></b>
<h2>Call APIs</h2>
<ul>
<li><a href="/test?api=extension">Read Extension Info</a></li>
<li><a href="/test?api=extension-call-log">Read Extension Call Log</a></li>
<li><a href="/test?api=account-call-log">Read Account Call Log</a></li>
</ul>
</body>
</html>
Кто-нибудь настроил поток авторизации Django для RingCentral и может показать мне, где это происходит?
Ответ №1:
Я понял это. Простой возврат resp.response()._content
из представления вызывал проблемы с Django. Я написал простое представление для отображения данных и вместо этого вернул отображаемый шаблон, resp.response()._content
включенный в контекст.
def test(request):
platform = SyncConfig.rcsdk.platform()
platform.auth().set_data(request.session['sessionAccessToken'])
if platform.logged_in() == False:
return index(request)
api = request.GET.get('api')
if api == "extension":
resp = platform.get("/restapi/v1.0/account/~/extension")
content = json.loads(resp.response()._content)
return render(request, 'sync/response.html', {'content': content})
elif api == "extension-call-log":
resp = platform.get("/restapi/v1.0/account/~/extension/~/call-log")
content = json.loads(resp.response()._content)
return render(request, 'sync/response.html', {'content': content})
elif api == "account-call-log":
resp = platform.get("/restapi/v1.0/account/~/call-log")
content = json.loads(resp.response()._content)
return render(request, 'sync/response.html', {'content': content})
else:
return render(request, 'sync/test.html')
И вот sync/response.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
</head>
<body>
<b><a href="/logout">Logout</a></b>
<h2>API Response</h2>
<ul>
{% for k, v in content.items %}
<li>{{ k }}: {{ v }}</li>
{% endfor %}
</ul>
</body>
</html>