팔로우 기능 구현
먼저 프로필 페이지를 간단하게 구현하자.
그리고 그 위에서 follow, unfollow를 구현하는 것
인스타그램처럼, 프로필 이름을 주소 값으로 넣어보자.
# 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'),
]
# accounts/views.py
from django.contrib.auth import get_user_model
def profile(request, username):
User = get_user_model()
person = User.objects.get(username=username)
context = {
'person': person,
}
return render(request, 'accounts/profile.html', context)
더보기
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 .forms import CustomUserChangeForm, CustomUserCreationForm
from django.contrib.auth import get_user_model
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)
# templates > accounts > profile.html
더보기
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<h1>{{ person.username }}님의 프로필 페이지</h1>
<div>
</div>
<h2>{{ person.username }}님이 작성한 게시글</h2>
{% for article in person.article_set.all %}
<div>{{ article.title }}</div>
{% endfor %}
<h2>{{ person.username }}님이 작성한 댓글</h2>
{% for comment in person.comment_set.all %}
<div>{{ comment.content }}</div>
{% endfor %}
<h2>{{ person.username }}님이 좋아요한 게시글</h2>
{% for article in person.like_articles.all %}
<div>{{ article.title }}</div>
{% endfor %}
</body>
</html>
'WEB > Django prac' 카테고리의 다른 글
[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][DB N:M ② 좋아요] 4. html 페이지 수정, 서버 실행 (0) | 2024.04.08 |
[Django prac][DB N:M ② 좋아요] 3. urls.py, views.py (0) | 2024.04.08 |
[Django prac][DB N:M ② 좋아요] 2. models.py, migrate (0) | 2024.04.08 |