์น์ 2์์๋ accounapp์ crud์ login/logout์ ๊ตฌํ
#21 CreateView๋ฅผ ํตํ ํ์๊ฐ์ ๊ตฌํ
ํ์ฌ ๊ฐ์๊น์ง๋ ์ ๊ตฌ์กฐ๋์์ ์ฅ๊ณ ๋ถ๋ถ๋ง์ ๊ตฌ์ถํ๊ณ ์์
class AccountCreateView(CreateView):
model = User
form_class = UserCreationForm
success_url = reverse_lazy('accountapp:hello_world')
template_name = 'accountapp/create.html'
์ด๋ฐ์์ผ๋ก create view์ด์ฉํด์ ํ์๊ฐ์ ๊ตฌ์ถ
#22 Login/Logout ๊ตฌํ
login๊ณผ logout view๋ ์ฅ๊ณ ์์ ๊ธฐ๋ณธ์ผ๋ก ์ ๊ณตํด์ค
view ์ฌ์ฉ์ผ๋ก url ์์
path('login/',LoginView.as_view(template_name='accountapp/login.html'), name='login'),
path('logout/',LogoutView.as_view(), name='logout'),
์ด๋ฐ ์์ผ๋ก url์ ๋ฐ๋ก ์ถ๊ฐ
login.html ๊ตฌํํด์ฃผ๋ฉด ๋
header.html ์์
๊ตฌ์กฐ๊ฐ ์์ ๊ฐ์์ ๋ก๊ทธ์ธ ํ๊ฒ ๋๋ฉด accounts/profile๋ก ์ด๋ํ๊ฒ๋๋๋ฐ ์ด๋ ๊ฒ ์๋์ผ๋ก ๋ค๋ฅธ ์ฃผ์๋ก ๊ฐ๊ฒ ๋๋ ๊ฒ์ ๋ง๊ธฐ ์ํด ์์ ํ์
{% if not user.is_authenticated %}
<a href="{% url 'accountapp:login' %}?next={{request.path}}">
<span>login</span>
</a>
{% else %}
<a href="% url 'accountapp:logout' %}?next={{request.path}}">
<span>logout</span>
</a>
{% endif %}
์ด๋ฐ์์ผ๋ก next์ธ์๋ ์ ๋ฌํด์ฃผ๊ณ ๋ก๊ทธ์ธ/๋ก๊ทธ์์ ํ์ด์ง๋ก ์ด๋ํ๋ span๋ ๋ง๋ค์ด์ค
์๋์์๋ url์ด next๋ก ๋์ด๊ฐ๋ฉด์ hello_world route๋ก ๋ค์ ๋์๊ฐ
๊ทธ๋ฌ๋, span๋ง๊ณ url์ login์ผ๋ก ์ง์ ์น๊ณ ๋ค์ด๊ฐ์ ๋ก๊ทธ์ธํ๋ ๊ฒฝ์ฐ ์์ง ์์ ๊ฐ์ ์ํฉ ๋ฐ์
⇒ login_redirect_url ์ค์ ํ์
LOGIN_REDIRECT_URL = reverse_lazy('accountapp:hello_world')
LOGOUT_REDIRECT_URL = reverse_lazy('accountapp:login')
์์ ๊ฐ์ด pragmatic/urls.py ์์ url ์ค์ ํด์ค
#23 Bootstrap์ ์ด์ฉํ Form ๋์์ธ ์ ๋ฆฌ
bootstrap์ ์ด์ฉํ์ฌ form ๋์์ธ์ ์ผ๊ด์ ์ผ๋ก ์์ ๊ฐ๋ฅ
https://django-bootstrap4.readthedocs.io/en/latest/index.html
์์ ๋งํฌ ์ฐธ๊ณ
install ํ๊ณ settings.py์ ๋ช ์ํด์ฃผ๊ธฐ
{% load bootstrap4 %}
{% bootstrap_form form %}
์์ ๊ฐ์์์ผ๋ก ๋ถ๋ฌ์์ ์ฌ์ฉํ๋ฉด ๋จ
๋ค์ด๋ฒ์์ ํฐํธ ๋ฐ์์์ ์ถ๊ฐ๋ก ์ค์ ํด์ค
pragmatic/static ์ fonts ๊ฒฝ๋ก ์ถ๊ฐํด์ ๊ทธ fonts ํ์ผ ์์ ๋ฐ์์จ ํฐํธํ์ผ๋ค ์ ์ฅํด์ค ๊ทธ๋ฆฌ๊ณ head.html์
<style>
@font-face{
font-family:'NanumGothic';
src:local('NanumBarunGothic-YetHangul'),
url("{% static 'fonts/NanumBarunGothic-YetHangul.otf' %}") format("opentype");
}
</style>
์์ ๊ฐ์ ์์ผ๋ก ๋ฃ์ด์ค ๋ค, ์ฌ์ฉํ๊ณ ์ ํ๋ ์์น์ ํฐํธ ์ค์
#24 DetailView๋ฅผ ์ด์ฉํ ๊ฐ์ธ ํ์ด์ง ๊ตฌํ
createView ๋ง๋ค์๋ ๊ฒ์ฒ๋ผ Detail view ์์ฑ
urls.py
path('detail/<int:pk>',AccountDetailView.as_view(), name='detail'),
์ ๋ณด๋ฅผ ์์ฑํ๋ create์ ๋ค๋ฅด๊ฒ detail์ ์ ๋ณด๋ฅผ ์ด๋ํ๋ ๊ฒ
์ด๋ค ์ ์ ์ ์ ๋ณด๋ฅผ ์ด๋ํ ์ง ์๊ธฐ ์ํด์ int:pk ํด์ค (primary key)
header.html
<a href="{% url 'accountapp:detail' pk=user.pk %}">
<span>MyPage</span>
</a>
๋ก๊ทธ์ธ ๋์ด์๋ ์ํฉ์์ MyPage๋ก ๋์ด๊ฐ ์ ์๋ span์ ๋ง๋ค์ด์ค
์ด๋, pk ๊ฐ์ ์ ๋ฌํด์ฃผ์ด์ผํ๊ธฐ ๋๋ฌธ์ ๋ก๊ทธ์ธ๋ ์ ์ ์ pk๋ฅผ pk=user.pk๋ก ๋๊ฒจ์ค
๋ก๊ทธ์ธ ํ mypage ๋๋ฌ๋ณด๋ฉด ์์ฒ๋ผ ๊ฐ์ ๋ ์ง์ ์ด๋ฆ ํ์ธ ๊ฐ๋ฅ
#25 UpdateView๋ฅผ ์ด์ฉํ ๋น๋ฐ๋ฒํธ ๋ณ๊ฒฝ ๊ตฌํ
updateview ์์ฑ
updateview๋ createview์ ์ ์ฌํ๊ฒ ์์ฑ ๊ฐ๋ฅ
update.html๋ ์์ฑํด์ค ๋ค, detail.html์์ update๋ก ๋์ด๊ฐ ์ ์๋ ๋งํฌ๋ฅผ ํ๋ ์์ฑํด์ฃผ๋ฉด,
์๋์ฒ๋ผ change info๊ฐ ๋ง๋ค์ด์ง ๊ฒ์ ๋ณผ ์ ์์.
(์ด๋ ๋งํฌ๊ฐ ๋ณด์ด๋ ์กฐ๊ฑด target_user==user์ธ ๊ฒฝ์ฐ)
Change Info ๋ฒํผ ํด๋ฆญ ์ ๋ํ๋๋ ์์ ํ๋ฉด
AccountUpdateForm ์์ฑ
html ์์ฑํ ๋ usercreationform์ ๊ทธ๋๋ก ๋ฐ์์์ ์ฌ์ฉํ๋๋ username(id)๋ ์์ ๊ฐ๋ฅํด์ ์ด๋ฅผ ์์๋ฐ๋ ์๋ก์ด form ์์ฑ
from django.contrib.auth.forms import UserCreationForm
class AccountUpdateForm(UserCreationForm):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['username'].disabled=True
์ ์ฒ๋ผ disabled=True๋ก ์ปค์คํฐ๋ง์ด์งํ๋ฉด,
username ๋นํ์ฑํ ๋จ!!
#26 DeleteView ๊ธฐ๋ฐ ํ์ํํด ๊ตฌํ
deleteview ์์ฑ
deleteview๋ ๋ง์ฐฌ๊ฐ์ง๋ก createview ์์ฑํ๋๊ฒ์ฒ๋ผ ์์ฑํด์ค
updateview ๋ณด์ด๊ฒ ํ๋ ๊ฒ์ฒ๋ผ quit ์ผ๋ก ๊ฐ๋ ๋งํฌ ์ถ๊ฐํด์ฃผ๊ณ quit ๋ค์ด๊ฐ๋ณด๋ฉด ์๋์ ๊ฐ์ด ๋ธ
์ ์ถ ๋ฒํผ ๋๋ฅด๋ฉด ํด๋น ๊ณ์ ์ญ์
๋ฐํ์๋์ ์ธํ๋ฐ ๊ฐ์๋ฅผ ์๊ฐํ๋ฉฐ ์ ๋ฆฌํด๋ณด๋ ๊ธ์ ๋๋ค.
https://www.inflearn.com/course/%EC%9E%A5%EA%B3%A0-%ED%95%80%ED%84%B0%EB%A0%88%EC%8A%A4%ED%8A%B8