회원가입, 탈퇴, 수정
from django.shortcuts import render, redirect
from django.contrib.auth.forms import (
AuthenticationForm,
PasswordChangeForm,
)
from django.contrib.auth import login as auth_login
from django.contrib.auth import logout as auth_logout
from django.views.decorators.http import require_POST, require_http_methods
from django.contrib.auth import update_session_auth_hash
from .forms import CustomUserCreationForm, CustomUserChangeForm
# Create your views here.
@require_http_methods(['GET', 'POST'])
def login(request):
if request.method == 'POST':
form = AuthenticationForm(data=request.POST)
if form.is_valid():
auth_login(request, form.get_user())
return redirect('products:main')
else:
form = AuthenticationForm()
context = {'form': form}
return render(request, 'accounts/login.html', context)
@require_POST
def logout(request):
auth_logout(request)
return redirect('products:main')
@require_http_methods(['GET', 'POST'])
def signup(request):
if request.method == 'POST':
form = CustomUserCreationForm(request.POST)
if form.is_valid():
user = form.save()
auth_login(request, user)
return redirect('products:main')
else:
form = CustomUserCreationForm()
context = {'form': form}
return render(request, 'accounts/signup.html', context)
@require_POST
def delete(request):
if request.user.is_authenticated:
request.user.delete()
auth_logout(request)
return redirect('products:main')
@require_http_methods(['GET', 'POST'])
def update(request):
if request.method == 'POST':
form = CustomUserChangeForm(request.POST, instance=request.user)
if form.is_valid():
form.save()
return redirect('products:main')
else:
form = CustomUserChangeForm(instance=request.user)
context = {'form': form}
return render(request, 'accounts/update.html', context)
def change_password(request):
if request.method == 'POST':
form = PasswordChangeForm(request.user, request.POST)
if form.is_valid():
form.save()
update_session_auth_hash(request, form.user)
return redirect('products:main')
else:
form = PasswordChangeForm(request.user)
context = {'form': form}
return render(request, 'accounts/change_password.html', context)
프로필 페이지
from django.shortcuts import render
from accounts.models import User
# Create your views here.
def profile(request, username):
user = User.objects.get(username=username)
context = {
'username': username,
'date_joined': user.date_joined,
}
return render(request, 'users/profile.html', context)
{% extends 'base.html' %}
{% block content %}
<h1>{{ username }}의 프로필 페이지</h1>
<ur>
<li>Username: {{ username }}</li>
<li>가입일: {{ date_joined }}</li>
</ur>
<br>
<a href="{% url 'accounts:update' %}">회원정보수정</a>
<form action="{% url 'accounts:delete' %}" method="POST">
{% csrf_token %}
<input type="submit" value="회원탈퇴">
</form>
<br><br>
<a href="{% url 'products:main' %}">메인으로 돌아가기</a>
{% endblock content %}
정보 수정, 회원 탈퇴 기능이 base.html에 있는게 뭔가 이쁘지 않아서,
유저 프로필 내부로 들어오면 가능하도록 바꿔줬다.
유저 프로필 내부에 메인으로 돌아가는 a태그 하나 추가.
프로필 내용은 일단 Username과 가입일만 표시.
오늘의 회고
잘한지는 모르겠지만
일단 목표한 만큼은 구현했다.
내일의 목표는 git 확실히 정리하고 products앱 내부 구현하기
'매일 TIL' 카테고리의 다른 글
[내일배움캠프 9-5일] 팀프로젝트 게시글 CRUD 구현 (0) | 2024.08.23 |
---|---|
[내일배움캠프 9-4일] 팀프로젝트 프로필 사진 구현 (0) | 2024.08.22 |
[내일배움캠프 9-2일] 팀프로젝트 로그인 기능 구현 (0) | 2024.08.20 |
[내일배움캠프 9-1일] 좋아요 구현, 팔로우 구현 (1) | 2024.08.19 |
[내일배움캠프 8-7일] 댓글 구현하기, Custom User Model, 1:N 확장 (0) | 2024.08.18 |