RingCentral OAuth с Django

#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>