2,896 바이트 추가됨
, 2021년 6월 21일 (월) 14:08
==유저 정보 수정==
===url만들기===
다음 url 추가.<syntaxhighlight lang="python3">
path('update/', views.update, name='update'),
</syntaxhighlight>
===Form 추가===
장고에서 제공하는 UserChangeForm을 상속할 필요는 없다. 기본 폼이 난 맘에 안들어.<syntaxhighlight lang="python3">
class UserUpdateForm(forms.ModelForm):
class Meta:
model = get_user_model()
fields = ['username', 'email', 'nickname']
</syntaxhighlight>
===view 추가===
<syntaxhighlight lang="python3">
from .forms import UserUpdateForm
def update(request):
if request.method == "POST":
form = UserUpdateForm(request.POST, instance=request.user) # 이게 없으면 수정할 때마다 새로운 계정을 만든다.
if form.is_valid():
form.save() # 폼값을 불러오고 저장
return redirect('membership:profile')
else:
form = UserUpdateForm(instance=request.user)
return render(request, 'user_update.html', {'form': form})
</syntaxhighlight>
===template 추가===
회원정보 수정에서 쓰이는 탬플릿은 회원가입에서도 쓰일 수 있으니... 따로 만들어두어 양쪽에서 함께 사용할 수 있게 배치하면 좋겠다.<syntaxhighlight lang="html+django">
from .forms import UserUpdateForm
def update(request):
if request.method == "POST":
form = UserUpdateForm(request.POST, instance=request.user) # 이게 없으면 수정할 때마다 새로운 계정을 만든다.
if form.is_valid():
print(request.POST['nickname'])
print(request.POST['email'])
form.save() # 폼값을 불러오고 저장
return redirect('membership:profile')
else:
form = UserUpdateForm(instance=request.user)
return render(request, 'user_update.html', {'form': form})
</syntaxhighlight>
==비밀번호 수정, 비밀번호 바꾸기==
===url 추가===
<code>path('password/', views.password, name='password'),</code>
===form 추가===
폼은 제공해주는 걸 가져다 쓴다.
===view 추가===
<syntaxhighlight lang="python3">
from django.contrib.auth.forms import PasswordChangeForm
from django.contrib.auth import update_session_auth_hash
@login_required
def password(request):
if request.method == 'POST':
form = PasswordChangeForm(user=request.user, data=request.POST)
if form.is_valid():
user = form.save()
# 비밀번호를 바꾸면 기존 세션과 일치하지 않게 되어 로그아웃된다. 이를 방지하기 위한 auth_hash 갱신.
update_session_auth_hash(request, user)
return redirect('membership:profile')
else:
form = PasswordChangeForm(request.user)
return render(request, 'user_update_password.html',{'form':form})
</syntaxhighlight>
===template에 추가===
[[분류:장고 기능구현(초급)]]