"회원관리 3-1. 회원정보 수정"의 두 판 사이의 차이
둘러보기로 가기
검색하러 가기
(새 문서: ==유저 정보 수정== ===url만들기=== 다음 url 추가.<syntaxhighlight lang="python3"> path('update/', views.update, name='update'), </syntaxhighlight> ===Form 추가=== 장...) |
|||
5번째 줄: | 5번째 줄: | ||
path('update/', views.update, name='update'), | path('update/', views.update, name='update'), | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | === | + | |
− | + | = 장고 제공 폼 사용 = | |
− | class | + | 가장 간편한 방법이다. |
+ | |||
+ | === form 추가 === | ||
+ | <syntaxhighlight lang="python3"> | ||
+ | from django.contrib.auth.forms import UserChangeForm # 제공하는 폼이 있다. | ||
+ | from django.contrib.auth import get_user_model # 장고에 커스텀으로 등록한 모델을 불러온다. | ||
+ | |||
+ | class User_update_form(UserChangeForm): | ||
class Meta: | class Meta: | ||
− | model = get_user_model() | + | model = get_user_model() # 설정된 커스텀모델 |
− | fields = [ | + | fields = ["nickname", "email"] # password1,2 필드는 자동추가된다. |
</syntaxhighlight> | </syntaxhighlight> | ||
− | ===view 추가=== | + | |
+ | === view 추가 === | ||
<syntaxhighlight lang="python3"> | <syntaxhighlight lang="python3"> | ||
from .forms import UserUpdateForm | from .forms import UserUpdateForm | ||
40번째 줄: | 48번째 줄: | ||
return render(request, 'user_update.html', {'form': form}) | return render(request, 'user_update.html', {'form': form}) | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | ==비밀번호 수정, 비밀번호 바꾸기== | + | =커스텀 폼을 사용하는 경우= |
+ | ===Form 추가=== | ||
+ | 장고에서 제공하는 UserChangeForm을 상속할 필요는 없다. 기본 폼이 난 맘에 안들어.<syntaxhighlight lang="python3"> | ||
+ | class UserUpdateForm(forms.ModelForm): | ||
+ | class Meta: | ||
+ | model = get_user_model() | ||
+ | fields = ['username', 'email', 'nickname'] | ||
+ | </syntaxhighlight> | ||
+ | ===비밀번호 수정, 비밀번호 바꾸기=== | ||
+ | 커스텀 폼의 경우 패스워드에 대해 따로 처리해주어야 한다. | ||
+ | |||
===url 추가=== | ===url 추가=== | ||
<code>path('password/', views.password, name='password'),</code> | <code>path('password/', views.password, name='password'),</code> | ||
− | |||
− | |||
===view 추가=== | ===view 추가=== | ||
− | <syntaxhighlight lang="python3"> | + | 폼을 건들 필요 없이, 뷰에서 바로 제공하는 폼을 사용하면 된다.(키 이름은 password1, 2 이니, 탬플릿에선 적당히 고쳐 사용할 것.)<syntaxhighlight lang="python3"> |
from django.contrib.auth.forms import PasswordChangeForm | from django.contrib.auth.forms import PasswordChangeForm | ||
from django.contrib.auth import update_session_auth_hash | from django.contrib.auth import update_session_auth_hash | ||
64번째 줄: | 80번째 줄: | ||
return render(request, 'user_update_password.html',{'form':form}) | return render(request, 'user_update_password.html',{'form':form}) | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | + | ||
[[분류:장고 기능구현(초급)]] | [[분류:장고 기능구현(초급)]] |
2022년 12월 14일 (수) 09:32 판
1 유저 정보 수정
1.1 url만들기
다음 url 추가.
path('update/', views.update, name='update'),
2 장고 제공 폼 사용
가장 간편한 방법이다.
2.1 form 추가
from django.contrib.auth.forms import UserChangeForm # 제공하는 폼이 있다.
from django.contrib.auth import get_user_model # 장고에 커스텀으로 등록한 모델을 불러온다.
class User_update_form(UserChangeForm):
class Meta:
model = get_user_model() # 설정된 커스텀모델
fields = ["nickname", "email"] # password1,2 필드는 자동추가된다.
2.2 view 추가
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})
2.3 template 추가
회원정보 수정에서 쓰이는 탬플릿은 회원가입에서도 쓰일 수 있으니... 따로 만들어두어 양쪽에서 함께 사용할 수 있게 배치하면 좋겠다.
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})
3 커스텀 폼을 사용하는 경우
3.1 Form 추가
장고에서 제공하는 UserChangeForm을 상속할 필요는 없다. 기본 폼이 난 맘에 안들어.
class UserUpdateForm(forms.ModelForm):
class Meta:
model = get_user_model()
fields = ['username', 'email', 'nickname']
3.2 비밀번호 수정, 비밀번호 바꾸기
커스텀 폼의 경우 패스워드에 대해 따로 처리해주어야 한다.
3.3 url 추가
path('password/', views.password, name='password'),
3.4 view 추가
폼을 건들 필요 없이, 뷰에서 바로 제공하는 폼을 사용하면 된다.(키 이름은 password1, 2 이니, 탬플릿에선 적당히 고쳐 사용할 것.)
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})