django) метод request.POST выдает ошибку: объект querydict не вызывается - PullRequest
0 голосов
/ 24 мая 2019

Я пытаюсь добавить социальный логин в мое приложение django-rest-framework, но я застрял в этой проблеме и мне нужна помощь.

Поток входа: код запроса (GET) -> Ответ-> Запрос токена (POST) (в этой части я застрял) -> Ответ

Ссылка на API здесь

Итак, послеЯ захожу в социальную учетную запись (например, Facebook), нажмите кнопку авторизации моего приложения, я получаю код доступа, подобный следующему:

@api_view(['GET', 'POST'])
def kakao_login(request):
    # Extracting 'code' from received url
    my_code = request.GET["code"]
    request.session['my_code'] = my_code
    return HttpResponseRedirect(reverse('kakao_auth_code'))
    # This makes me redirect to 'kakao_auth_code' url

После этого я должен запросить token, используя код пользователя, полученный мной сверху.

В соответствии с документом API я должен использовать метод POST следующим образом.

curl -v -X POST https://kauth.kakao.com/oauth/token \
 -d 'grant_type=authorization_code' \
 -d 'client_id={app_key}' \
 -d 'redirect_uri={redirect_uri}' \
 -d 'code={authorize_code}'

Поэтому я реализовал свой код следующим образом:

@api_view(['GET', 'POST'])
def kakao_auth_code(request):
    my_code = request.session.get('my_code')
    try:
        del request.session['my_code']
    except KeyError:
        pass
    request.POST(grant_type = 'authorization_code', client_id = '428122a9ab5aa0e8    140ab61eb8dde36c', redirect_uri = 'accounts/kakao/login/callback/', code = my_code)
    return HttpResponseRedirect('/')

Но я получаю эту ошибку в строке request.POST(...).

Объект 'QueryDict' не вызывается

Я просто не знаю какрешить эту проблему на request.POST().Любая помощь будет очень признательна.

1 Ответ

2 голосов
/ 24 мая 2019

Вы можете использовать Стороннюю библиотеку с именем requests для вызова API, который находится за пределами проекта Django:

import requests

def kakao_auth_code(request):
   ...

   data = dict(grant_type = 'authorization_code', client_id = '428122a9ab5aa0e8    140ab61eb8dde36c', redirect_uri = 'accounts/kakao/login/callback/', code = my_code)
   response = requests.post('https://kauth.kakao.com/oauth/token', data=data)
   if response.status_code == 200:
      token = response.json().get('access_token')
...