728x90
반응형
createview는 뭔가를 만들어야하니까 form_class랑 (success_url) 성공했을때 redirect할 구간을 정해줬는데 detailview니까 어떤 모델을 쓸지 모델안에 있는 정보를 어떻게 시각화해줄지 그것만 신경써주면된다.
1
views.py
class AccountDetailView(DetailView):
model = User
template_name = 'accountapp/detail.html'
2
detail.html 생성
{% extends 'base.html' %}
{% block content %}
<div>
<div style="text-align: center; max-width: 500px; margin: 4rem auto;">
<p>
{{ user.date_joined }}
</p>
<h2>
{{ user.username}}
</h2>
</div>
</div>
{% endblock %}
3
urls.py path 추가
from django.contrib.auth.views import LoginView, LogoutView
from django.urls import path
from accountapp.views import hello_world, AccountCreateView, AccountDetailView
app_name = 'accountapp'
urlpatterns = [
path('hello_world/', hello_world, name='hello_world'),
path('login/', LoginView.as_view(template_name='accountapp/login.html'), name='login'),
path('logout/', LogoutView.as_view(), name='logout'),
path('create/', AccountCreateView.as_view(), name='create'),
path('detail/<int:pk>', AccountDetailView.as_view(), name='detail'),
]
detailview는 특정유저의 정보를 봐야하는거니까 특정유저 그 계정의 아이디(primary key)가 필요하다.
<int:pk> 는 int로 pk를 받아오고 결과적으로 몇번유저에 접근할 것인지를 알려준다.
4
header.html
<div class="platypus_header">
<div>
<h1 class="platypus_logo">Platypus</h1>
</div>
<div>
<span>nav1</span>
<span>nav2</span>
<span>nav3</span>
{% if not user.is_authenticated %}
<a href="{% url 'accountapp:login' %}?next={{ request.path }}">
<span>login</span>
</a>
{% else %}
<a href="{% url 'accountapp:detail' pk=user.pk %}">
<span>MyPage</span>
</a>
<a href="{% url 'accountapp:logout' %}?next={{ request.path }}">
<span>logout</span>
</a>
{% endif %}
</div>
</div>
로그인상태일때 MyPage도 보이게 추가. 이때 pk=user.pk도 줘야한다.
5
런서버 접속해보면 user.date_joined와 user.username가 잘 나온다.
6
수정사항: user.date_joined와 user.username 생각해보면 user의 값을 받아오니까 인스타를 생각해보면 다른사람, 연예인 계정에 들어가도 내 정보가 나오게된다. 이것을 수정한다.
class AccountDetailView(DetailView):
model = User
context_object_name = 'target_user'
template_name = 'accountapp/detail.html'
{% extends 'base.html' %}
{% block content %}
<div>
<div style="text-align: center; max-width: 500px; margin: 4rem auto;">
<p>
{{ target_user.date_joined }}
</p>
<h2>
{{ target_user.username}}
</h2>
</div>
</div>
{% endblock %}
728x90
반응형
'웹 프로그래밍' 카테고리의 다른 글
[pinterest clone (18)] DeleteView를 이용한 회원탈퇴 구현 (0) | 2021.04.28 |
---|---|
[pinterest clone (17)] UpdateView를 이용한 비밀번호 변경 구현 (0) | 2021.04.28 |
[pinterest clone (15)] form 디자인 (0) | 2021.04.28 |
[pinterest clone (14)] Login / Logout 구현 (0) | 2021.04.27 |
[pinterest clone (13)] CreateView를 통한 회원가입 구현 (0) | 2021.04.27 |