サードパーティのQQ Djangoプロジェクトを使用してログインします。

QQのWebアプリケーションの使用は、インターネットQQの公式サイトで作成されていることを前提にログインし、WebアプリケーションにおけるAPP ID QQインターネットおよびAPP KEYを取得

1、内蔵されたルーティング

#1      QQ登录 
    パス(' loginQq / '、qq.loginQq、NAME = ' loginQq / ' )、
    パス(' 戻る/ '、qq.returns、名前= ' 戻ります/ ')、

2、フロントページ書き込みQQのログインリンクは、この論文では、一時的にリンク要求を使用するためにアイコンを使用していませんでした。

<a data-wow-delay= ".5s" href= "/blog/loginQq/"> QQ登录する</a>»

図3に示すように、フォルダの下に作成されたアプリケーションプログラム、及び、機能をカプセル化するための戻りデータからパッケージのOpenID(データベース・ユーザーID内部テンセント)を抽出する機能をfunction.py utilsの作成

次のように関数の内容は、カプセル化されました。

輸入

デフparse_jsonp(jsonp_str):
     試してくださいリターン re.search(' ?。^ [^(] * \((*)\)[^)] * $ '、jsonp_str).group(1 を除い引き上げるとValueErrorを(' 无效数据!'

図4に示すように、コードビハインド

django.shortcuts インポート、レンダリングリダイレクトを、のHttpResponse、HttpResponseRedirect
 から blog.models インポートメンバー
 から urllibはインポートの解析
 から urllibはのインポート要求としてREQ
 インポートインポートJSON
 のインポートランダム
 から blog.utils インポート機能
 DEF loginQq(要求):
    国家 = STR( random.randrange(100000,999999)) は、クロスドメインの偽造攻撃を防ぐために、ランダムなステータスコードを定義します。
    ますrequest.session [作る' 国家' ] =国家を  ランダムステータスコードが返された認証情報を検証するため、セッションを保存します。
    = CLIENT_ID ' 101 716 344 '   #のWebアプリケーションAPP IDでQQインターネット。
    コールバックアドレスがコード化され、ユーザーは認証がこのリンクをコールすることに同意します。
    =コールバックをparse.urlencode({ ' REDIRECT_URI '' http://127.0.0.1:8000/blog/returns ' })   。REDIRECT_URI = HTTP%3A 2F %%% 2Fblog 2F127.0.0.1%3A8000%2Freturnsの
    #1 団体サードパーティのQQのログインリンク 
    LOGIN_URL = ' https://graph.qq.com/oauth2.0/authorize?response_type=code&client_id=%s&%s&state=%s '(client_idの、コールバック、州)
     リターン HttpResponseRedirect(LOGIN_URL)  QQのログインは、サードパーティの認証ページにリダイレクト
DEF (リクエスト)を返します:
     IFますrequest.session [ 国家 ] == request.GET [ 国家 ]:  検証のステータスコードは、クロスドメイン偽造攻撃を防ぎます。
        = `` request.GET``コード[ ' コード' ]   ユーザ認証コード取得 
        CLIENT_IDを= ' 101 716 344 '   APP ID QQ配線Webアプリケーション。
        = client_secret ' 7f42aaac69f866750078fbe1edd9d2a4 '   WebアプリケーションでAPPキーQQインターネット。
        =コールバック({parse.urlencode ' REDIRECT_URIを'Http://127.0.0.1:8000/blog/returns })
        コールバックアドレスがエンコードされているが、ユーザーが認証がこのリンクをコールすることに同意します。
        = LOGIN_URL ' https://graph.qq.com/oauth2.0/token?grant_type=authorization_code&code=%s&client_id=%s&client_secret=%s&%s '%(コード、CLIENT_ID、client_secret、コールバック)   #のアクセストークンを取得するために、組織リンク
        #は、のHttpResponse(LOGIN_URL)を返す 
        。レスポンス= req.urlopen(LOGIN_URL).read()のデコード()  123456789&:オープンアクセストークン取得リンクaccess_tokenは

        access_tokenは = re.split(' '、レスポンス)[0]を   123456789:アクセスaccess_tokenはトークン取得

        RESをReq.urlopen =(' https://graph.qq.com/oauth2.0/me?' + access_tokenは).read()。デコード()  オープンOpenIDのリンクを取得する

        のOpenID = json.loads(function.parse_jsonpを( RES))' のOpenID ' ]   リターンデータから取得410225632333335556566のOpenID 

        のUserInfo = req.urlopen(' https://graph.qq.com/user/get_user_info?oauth_consumer_key=%s&openid=%s&%s '
            CLIENT_ID 、OpenIDの、access_tokenは))。読む()。デコード()  ユーザーの情報へのリンクのためのオープン
        #の印刷ビュー取得したユーザ情報の
        印刷(のUserInfo)
        のUserInfoJson.loads =(のUserInfo)  ユーザ情報(JSON形式)データを返した辞書として読み取ります。
        = Member.objects.filterユーザー(member_qq_id = OpenIDの)   #のユーザーが存在するかどうかを問い合わせ
        IF  ません:ユーザは   何のユーザーが存在する場合
            #は、新しいユーザーを作成していない 
            member_obj = Member.objects.create(member_qq_id = OpenIDの、member_nickname =のUserInfo [ ' ニックネーム' ]、MEMBER_NAMEのUserInfo = [ ' ニックネーム' ]、member_photoのUserInfo = [ ' figureurl_qq_1 ' ])
            ユーザーメンバー=()新しいユーザーを作成します。# 
            user.member_qq_id = OpenIDのユーザ情報#の書き込み
            #をuser.member_nickname =ユーザー情報[ 'ニックネーム'] #の書き込みユーザ情報
            user.member_nameのUserInfo = [ 'ニックネーム']ユーザ情報#書き込む
            ユーザ情報#を書き込むため#user.genderのUserInfo = [ '性別'] 
            ユーザー.member_photo =のuserinfo [ 'figureurl_qq_1'] #の書き込みユーザー情報
            #1 user.save()#保存またはユーザーが更新 
            ますrequest.session [作る' MEMBER_ID ' ] = member_obj.member_id   ユーザーがセッションの書き込みのOpenIDを記録し 
            ますrequest.sessionを作ります【' MEMBER_NAME ' ] =のUserInfo [ ' ニックネーム' ]
         #の  ホームへの戻り経路
        リターンリダイレクト('/ブログ/インデックス/ "それ以外返すのHttpResponseを(' 認証に失敗しました!'

この記事では、ローカルのテストプロジェクトにQQのログイン機能なので、インターネットのコールバックアドレスQQの公式サイトがローカルアドレス用に変更する必要があり、

5、機能テストプロジェクトを開始

 

図6は、データベーステーブルのメンバーは、メンバーシップ情報が書き込まれているビュー。

行わ。

おすすめ

転載: www.cnblogs.com/nmsghgnv/p/11343711.html