Today I Learned|7月29日


今日は何をしましたか。🍑

1 Code Kata day92 Westagram Wrap-up

1. 🍑 Code Kata day9 🍑


👉 リンク


2. 🍑 Westagram Wrap-up 🍑


昨日フロントとヴィスタックのコードを貼る時間がありました.会員入力もログインAPIも確認して、ログインAPIはずっと500個のエラーを表示していますが、これはいったい何の問題がありますか?40分以上悩んだ.今日の会話の授業で説明を聞いて解決した.

問題コード


users/views.py
try :
    data     = json.loads(request.body)
    email    = data['email']
    password = data['password']
    user = User.objects.get(email=email)
    
    if not User.objects.filter(email=email).exists():
        return JsonResponse({'message':'INVALID_EMAIL'}, status=401)
これは,ユーザが入力したメールがDBにあるかを確認し,ない場合はエラーメッセージを表示する論理である.DBにない電子メールをサーバに送信すると、
User.DoesNotExist:User matching query does not exist. エラーが発生しました.
旗編では,他の人が作成したコードを確認してもif文existsメソッドを用いたコードは同じであることが分かったが,なぜエラーが発生したのかを考えると,「user」変数の位置を変えると正常に動作する.原因は内線では不明です.^^そして今日の会議でこの説明を聞きました.
user変数は、jsonデータに含まれるemailと一致するemail値を持つオブジェクトを指定します.この変数は、if文でオブジェクトの存在をフィルタしない前に、ユーザに現れない値を割り当てる必要があるからです.DoesNotExistエラーが発生しました.
私から見れば、彼は会議を符号化することを考えている間に、変数を整理しようとしたが、論理順序を破壊した.💩

修正されたコード

try :
    data     = json.loads(request.body)
    email    = data['email']
    password = data['password']
   
    if not User.objects.filter(email=email).exists():
        return JsonResponse({'message':'INVALID_EMAIL'}, status=401)
        
    user = User.objects.get(email=email)   
user変数の位置をifゲートの下に移動すると、エラーなく正常に動作します.
その他のTip
  • バックエンドコラボレーションの場合、モデルの変更は1人で担当します.
    移行ファイルが異なる場合、githubは共有時に競合
  • が発生します.
  • print()関数を使用して
  • をデバッグ

    デコレーション完成~!


    users/utils.py
    import json, jwt
    
    from django.http import JsonResponse
    
    from my_settings  import SECRET_KEY
    from users.models import User
    
    def login_required(f):
        def wrapper(self, request, *ars, *kwargs):
            try:
                access_token = request.headers['Authorization']
                
                if access_token:
                    payload = jwt.decode(access_token, SECRET_KEY, algorithms='HS256')
                    user = User.objects.get(id = payload['id'])
                    request.user = user.id
                    
                    return f(self, request, *args, **kwargs)
                    
            except jwt.exceptions.DecodeError:
                return JsonResponse({'message':'invalid_access_token'}, status=400)
            except keyError:
                return JsonResponse({'message':'sign_up_first'}, status=400)
        return wrapper
    このコードを書くのに数日かかります…^^装飾師という概念にも慣れていない.
    requestメッセージのデータをどのように受信するか、これらの情報をどのように使用するかは、ほとんど無から有まで難しいので、少し難しいですハハ...
    tryに書き出されたコードが問題になっているので、いつもエラーが発生します.
    だから結論は最初からしっかり書こう.途中で道を間違えると,まちがいがあって探しにくい
    (アルゴリズムを書くべきだがアルゴリズムを書いていったい何回読んだのか…)