# accounts > urls.py
더보기
from django.urls import path
from . import views
app_name = 'accounts'
urlpatterns = [
path('login/', views.login, name='login'),
path('logout/', views.logout, name='logout'),
path('signup/', views.signup, name='signup'),
path('delete/', views.delete, name='delete'),
path('update/', views.update, name='update'),
path('profile/<str:username>/', views.profile, name='profile'),
path('<int:user_pk>/follow/', views.follow, name='follow'),
]
# accounts > views.py
from django.shortcuts import render, redirect
from django.contrib.auth import login as auth_login
from django.contrib.auth import logout as auth_logout
from django.contrib.auth import update_session_auth_hash
from django.contrib.auth.decorators import login_required
from django.contrib.auth.forms import AuthenticationForm, PasswordChangeForm
from django.contrib.auth import get_user_model
from .forms import CustomUserChangeForm, CustomUserCreationForm
@login_required
def follow(request, user_pk):
me = request.user
you = get_user_model().objects.get(pk=user_pk)
# 자기 자신을 팔로우 할 수 없음
if me != you:
# 요청하는 사람이 상대방의 팔로워 목록에 있는지 없는지
if me in you.followers.all():
you.followers.remove(me)
# me.followings.remove(you)
else:
you.followers.add(me)
# me.followings.add(you)
return redirect('accounts:profile', you.username)
더보기
from django.shortcuts import render, redirect
from django.contrib.auth import login as auth_login
from django.contrib.auth import logout as auth_logout
from django.contrib.auth import update_session_auth_hash
from django.contrib.auth.decorators import login_required
from django.contrib.auth.forms import AuthenticationForm, PasswordChangeForm
from django.contrib.auth import get_user_model
from .forms import CustomUserChangeForm, CustomUserCreationForm
def login(request):
if request.user.is_authenticated:
return redirect('articles:index')
if request.method == 'POST':
form = AuthenticationForm(request, request.POST)
if form.is_valid():
auth_login(request, form.get_user())
return redirect('articles:index')
else:
form = AuthenticationForm()
context = {
'form': form,
}
return render(request, 'accounts/login.html', context)
@login_required
def logout(request):
auth_logout(request)
return redirect('articles:index')
def signup(request):
if request.user.is_authenticated:
return redirect('articles:index')
if request.method == 'POST':
form = CustomUserCreationForm(request.POST)
if form.is_valid():
form.save()
return redirect('articles:index')
else:
form = CustomUserCreationForm()
context = {
'form': form,
}
return render(request, 'accounts/signup.html', context)
@login_required
def delete(request):
request.user.delete()
return redirect('articles:index')
@login_required
def update(request):
if request.method == 'POST':
form = CustomUserChangeForm(request.POST, instance=request.user)
if form.is_valid():
form.save()
return redirect('articles:index')
else:
form = CustomUserChangeForm(instance=request.user)
context = {
'form': form,
}
return render(request, 'accounts/update.html', context)
@login_required
def change_password(request, user_pk):
if request.method == 'POST':
form = PasswordChangeForm(request.user, request.POST)
if form.is_valid():
user = form.save()
update_session_auth_hash(request, user)
return redirect('articles:index')
else:
form = PasswordChangeForm(request.user)
context = {
'form': form,
}
return render(request, 'accounts/change_password.html', context)
def profile(request, username):
User = get_user_model()
person = User.objects.get(username=username)
context = {
'person': person,
}
return render(request, 'accounts/profile.html', context)
@login_required
def follow(request, user_pk):
me = request.user
you = get_user_model().objects.get(pk=user_pk)
# 자기 자신을 팔로우 할 수 없음
if me != you:
# 요청하는 사람이 상대방의 팔로워 목록에 있는지 없는지
if me in you.followers.all():
you.followers.remove(me)
# me.followings.remove(you)
else:
you.followers.add(me)
# me.followings.add(you)
return redirect('accounts:profile', you.username)
'WEB > Django prac' 카테고리의 다른 글
[Django prac][Fixtures] 2. 데이터를 json 파일로 만들기 (0) | 2024.04.12 |
---|---|
[Django prac][Django prac][DB N:M 팔로우] 6. (0) | 2024.04.12 |
[Django prac][Django prac][DB N:M 팔로우] 4. (0) | 2024.04.12 |
[Django prac][Django prac][DB N:M 팔로우] 3. (0) | 2024.04.12 |
[Django prac][Django prac][DB N:M 팔로우] 2. 프로필 구현 (0) | 2024.04.12 |