[instamg] UserProfileView

17248 ワード


ページの構造が異なります

ユーザーのプロファイルの更新

  • accout
  • email
  • password
  • phone
  • profile photo
  • form-データ形式でデータを受信

    🙅🏻‍♀️ エラーコード

        @login_check
        def post(self, request):
            data  = json.loads(request.POST['json'])
            user = request.user
            PASSWORD_LENGTH = 8
            EMAIL_VALIDATOR = re.compile(r"[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?")
            new_password = data.get('new_password')
            new_account = data.get('new_account')
            new_phone = data.get('new_phone')
            new_email = data.get('new_email')
            
            # 생략(account 변경)
            
            # 생략(email 변경)
            
            # 생략(phone 변경)
            
            # 생략(password 변경)
            
            if request.FILES.get('profile_photo'):
                print(request.FILES.get('profile_photo'))
                files = request.FILES['profile_photo']
                User.objects.filter(id = user.id).update(profile_photo=files, thumbnail_path=files)
                return JsonResponse({'message' : 'PROFILE_PHOTO_CHANGE_COMPLETE'})
    

    ERROR MESSAGE



    json形式で受信したデータは自動的に更新されますが、ファイルが受信されると次のエラーメッセージが表示されます.request.POST['json']ではなくrequest.POST.get('json')を使用して解決しますか?['json']を用いて‘json’に相当する値を返し、存在しなければKeyErrorを生成する.
    dictにkey値がある別の取得方法.get('key').getを使用して、存在しないkeyであれば、Noneが戻されます.また、.get('key', 'defaultvalue')のように、keyの値がなければ、defaultの値を設定することができる.

    🙅🏻その他のエラー

        @login_check
        def post(self, request):
            data = json.loads(request.POST.get('json')) #.get을 사용
            new_password = data.get('new_password')
            new_account = data.get('new_account')
            new_phone = data.get('new_phone')
            new_email = data.get('new_email')
            .
            .
            .

    ERROR MESSAGE



    考え直したら、もちろん間違いが・・・
    アイコンをアップロードした時に'json'は値がなくて、Noneでしょう!

    🙆🏻解決する

    @login_check
        def post(self, request):
            user = request.user
            PASSWORD_LENGTH = 8
            EMAIL_VALIDATOR = re.compile(r"[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?")
    
            if request.POST.get('json') is not None:
                data = json.loads(request.POST.get('json'))
                new_password = data.get('new_password')
                new_account = data.get('new_account')
                new_phone = data.get('new_phone')
                new_email = data.get('new_email')
    
                if new_account:
                    if User.objects.filter(account=new_account).exists():
                        return JsonResponse({'message' : 'ALREADY_IN_USE'}, status=400)
                    User.objects.filter(id=user.id).update(account=new_account)
                    return JsonResponse({'message' : 'ACCOUNT_CHANGE_COMPLETE'}, status=200)
                    .
                    .
                    .
             if request.FILES.get('profile_photo'):
                print(request.FILES.get('profile_photo'))
                files = request.FILES['profile_photo']
                User.objects.filter(id = user.id).update(profile_photo=files, thumbnail_path=files)
                return JsonResponse({'message' : 'PROFILE_PHOTO_CHANGE_COMPLETE'})
    条件文がNoneでない場合は、値を変数に保存します.
    コードがめちゃくちゃ?でも後でRefactoring

    一緒に解決してくれた霧雨ジャンゴに圧倒的な感謝!!ははは

    🚫 エラー


    フォームデータとして受信したファイルデータ(本プロジェクトでは、ファイルはs 3ではなくmediafileに格納されていることに注意してください)は、ローカルに保存できません...
    dbをチェックすると、ファイルが更新されたファイルに変更されたが、ローカルに保存されていないことがわかります.
    フロントと通信していた時、写真も表示されず…
    フィルターが効かないものを加えて、saveに変えます.
    if request.FILES.get('profile_photo'):
                    path = request.FILES['profile_photo']
                    user=User.objects.filter(id = user.id)[0]
                    user.profile_photo = path
                    user.thumbnail_path = path
                    user.save()
                    return JsonResponse({'message' : 'PROFILE_PHOTO_CHANGE_COMPLETE'})
    dbでよく保存されていて、ローカルでもよく保存されていて、フロントと通信するときも写真がいいです.
    しかし
    エラーが見つかりません...
    To be continue....