Python-Djangoユーザー登録モジュール--QQ登録(二)


QQの登録するウェブサイトのビューに戻ります
1.バックエンドインタフェースの設計:
要求方式:GET /oauth/qq/authorization/?next=xxx要求パラメータ:クエリー文字列
パラメータ名
を選択します.
必要かどうか
説明
next
str
いいえ
QQは登録して成功した後に美多商城のどのURLに入ります
返却データ:JSON
{
    "login_url": "https://graph.qq.com/oauth2.0/show?which=Login&display=pc&response_type=code&client_id=101474184&redirect_uri=http%3A%2F%2Fwww.meiduo.site%3A8080%2Foauth_callback.html&state=%2F&scope=get_user_info"
}

戻り値
を選択します.
必要かどうか
説明
login_url
str
はい
qq登録サイト
Qログインに関するアプリケーション開発情報をプロファイルに追加
# QQ    
QQ_CLIENT_ID = '101474184'
QQ_CLIENT_SECRET = 'c6ce949e04e12ecc909ae6a8b09b637c'
QQ_REDIRECT_URI = 'http://www.meiduo.site:8080/oauth_callback.html'
QQ_STATE = '/'

新しいoauth/utils.pyファイル、QQログイン補助ツールクラスの作成
from urllib.parse import urlencode, parse_qs
from urllib.request import urlopen
from itsdangerous import TimedJSONWebSignatureSerializer as Serializer, BadData
from django.conf import settings
import json
import logging

from . import constants

logger = logging.getLogger('django')


class OAuthQQ(object):
    """
    QQ       
    """
    def __init__(self, client_id=None, client_secret=None, redirect_uri=None, state=None):
        self.client_id = client_id or settings.QQ_CLIENT_ID
        self.client_secret = client_secret or settings.QQ_CLIENT_SECRET
        self.redirect_uri = redirect_uri or settings.QQ_REDIRECT_URI
        self.state = state or settings.QQ_STATE  #                 

    def get_qq_login_url(self):
        """
          qq     
        :return: url  
        """
        params = {
            'response_type': 'code',
            'client_id': self.client_id,
            'redirect_uri': self.redirect_uri,
            'state': self.state,
            'scope': 'get_user_info',
        }
        url = 'https://graph.qq.com/oauth2.0/authorize?' + urlencode(params)
        return url

oauth/views.pyでのインプリメンテーションビュー
#  url(r'^qq/authorization/$', views.QQAuthURLView.as_view()), 
class QQAuthURLView(APIView):
    """
      QQ   url
    """
    def get(self, request):
        """
            qq   url
        """
        next = request.query_params.get('next')
        oauth = OAuthQQ(state=next)
        login_url = oauth.get_qq_login_url()
        return Response({'login_url': login_url})

2.先端
loginを変更します.js,methodsにq_を追加するloginメソッド
        // qq  
        qq_login: function(){
            var next = this.get_query_string('next') || '/';
            axios.get(this.host + '/oauth/qq/authorization/?next=' + next, {
                    responseType: 'json'
                })
                .then(response => {
                    location.href = response.data.login_url;
                })
                .catch(error => {
                    console.log(error.response.data);
                })
        }