2017-05-01 13 views
0

の取り扱い:HTTPErrorのpython3 Firebase DB

"[Errno 400 Client Error: Bad Request for url: 
https://www.googleapis.com/identitytoolkit/v3/relyingparty/signupNewUser? 
key=%20AIzaSyCm0XR9oECpQOBTp_iouf3RJTD-Nq0fuXg] { 
"error": { 
    "errors": [ 
{ 
    "domain": "global", 
    "reason": "invalid", 
    "message": "WEAK_PASSWORD : Password should be at least 6 characters" 
} 
], 
"code": 400, 
"message": "WEAK_PASSWORD : Password should be at least 6 characters" 
} 
}" 

私は応答からのメッセージとコードを解析しようとしている:

email = request.POST['email'] 
password = request.POST['password'] 
config = { 
    "apiKey": "", 
    "authDomain": "", 
    "databaseURL": "", 
    "storageBucket": "" 
} 
firebase = pyrebase.initialize_app(config) 
auth = firebase.auth() 
try: 
    user = auth.create_user_with_email_and_password(email, password) 
    user = auth.refresh(user['refreshToken']) 
    request.session['user_uuid'] = user 
    if user != "": 
     print("You're logged in.") 
     return redirect('') 
    else: 
     print("") 

except requests.exceptions.HTTPError as e: 
    print(e) 

私はこの応答を受け取りますしかし、私はsubscriptableエラーを取得し続けています。私は応答を解析するために、次のコードを使用しています:

data = e[-1] 
data = (json.dumps(json.loads(data), sort_keys = True, indent = 4)) 
data = json.loads(data) 
error = data['error'] 
error_message = error['message'] 
print(error_message) 
context_dict = { 
    'message': error_message 
} 
+0

問題を示す[MCVE]を作成して投稿する必要があります。あなたはまた、間違いのように見える 'key'パラメータの始めにエンコードされたスペースを持っているようです。 – pvg

答えて

0

pyrebaseが更新requests.HTTPError exceptionを発生させます。元の例外を再ラッピングします。

.args属性でその例外がラップする2つの値を取得できます。元の例外を持つタプルで、request_object.textの値が第2のタプルです。 2番目の値を解析する場合は、またはを使用して、元の例外を使用して応答オブジェクトを取得し、.json()を使用して要求ライブラリに解析を実行させることができます。

except requests.exceptions.HTTPError as e: 
    error_json = e.args[1] 
    error = json.loads(error_json)['error'] 

または

except requests.exceptions.HTTPError as e: 
    response = e.args[0].response 
    error = response.json()['error'] 

正直に言うと、プロジェクトがこれを行う理由は、私はかなり知りません。元の例外にはすでにバンドルされている情報が含まれています。例えば例外を再ラップする代わりに、original_exception.response.textを使用すると、同じテキスト値が生成されます。

+0

ありがとう、ありがとう。私は非常に混乱していて、「e.response」を印刷するたびに何も得られませんでした。ありがとうございました!! – Denis

+0

@Denis:はい、私は不必要に物事を隠すので、プロジェクトがこれを行う理由はわかりません。 –