[instamg] UserProfileView
17248 ワード
ページの構造が異なります
ユーザーのプロファイルの更新
🙅🏻♀️ エラーコード
@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....
Reference
この問題について([instamg] UserProfileView), 我々は、より多くの情報をここで見つけました https://velog.io/@mini_y/instamguserprofileviewテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol