21강
django container
Accountapp
•
view 상속 : django.views.generic
•
reverse : def
•
reverse_lazy : class
22강
•
Login/Logout View
◦
Login
▪
path('login/', LoginView.as_view(template_name='accountapp/login.html'), name='login'),
◦
Logout
▪
path('logout/', LogoutView, name='logout'),
•
Redirect Mechanism
◦
next → LOGIN_REDIRECT_URL → Default
◦
settings.py
LOGIN_REDIRECT_URL = reverse_lazy('accountapp:hello_world')
LOGOUT_REDIRECT_URL = reverse_lazy('accountapp:login')
Python
복사
23강
•
bootstrap 스타일링 정리
settings.py/INSTALLED 입력
◦
bootstrap 설치 → {{ form }} 대신 {% bootstrap_form form %}사용
class="btn btn-dark rounded-pill col-6 mt-3
Python
복사
col : parent 너비의 비율 (12=100%), mt(margin top)
•
글꼴
◦
static 파일에 fonts , fonts 에 사용할 폰트(.otf) 넣기
◦
head.html
<style>
@font-face {
font-family: 'NanumSquareR';
src: local('NanumSquareR'),
url("{% static 'fonts/NanumSquareR.otf' %}") format("opentype");
}
@font-face {
font-family: 'NanumSquareEB';
src: local('NanumSquareEB'),
url("{% static 'fonts/NanumSquareEB.otf' %}") format("opentype");
}
@font-face {
font-family: 'NanumSquareB';
src: local('NanumSquareB'),
url("{% static 'fonts/NanumSquareB.otf' %}") format("opentype");
}
@font-face {
font-family: 'NanumSquareL';
src: local('NanumSquareL'),
url("{% static 'fonts/NanumSquareL.otf' %}") format("opentype");
}
</style>
HTML
복사
24강
•
Detail View (Read View)
◦
Detail 을 보기 위해서는 primary key 필요
class AccountDetailView(DetailView):
model = User
context_object_name = 'target_user'
template_name = 'accountapp/detail.html'
Python
복사
<div>
<div style="text-align:center; max-width:500px; margin: 4rem auto">
<p>
{{ target_user.date_joined }}
</p>
<h2 style="font-family: 'NanumSquareB';">
{{ target_user.username }}
</h2>
</div>
</div>
HTML
복사
25강
•
Update View (Change info)
◦
Create View와 유사
•
ID 수정 비활성화
◦
accountapp → forms.py
from django.contrib.auth.forms import UserCreationForm
class AccountUpdateForm(UserCreationForm):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['username'].disabled = True
Python
복사
26강
•
Delete View
◦
views.py
class AccountDeleteView(DeleteView):
model = User
success_url = reverse_lazy('accountapp:login')
template_name = 'accountapp/delete.html'
Python
복사
27강
•
Authentication
28강
•
Decorator
◦
함수를 꾸며주는 역할
login 여부: login_required
lognin user 와 현재 페이지 접근 user 일치
def account_ownership_required(func):
def decorated(request, *args, **kwargs):
user = User.objects.get(pk=kwargs['pk'])
if not user == request.user:
return HttpResponseForbidden()
return func(request, *args, **kwargs)
return decorated
Plain Text
복사
@login_required
Python
복사
decorator 사용시 @
has_ownership = [account_ownership_required, login_required]
Python
복사
리스트 가능
29강
•
Super User 생성
◦
admin
•
media 관련
30강
•
profile
◦
Account : Profile
◦
Profile
▪
Image, Nickname, Message
▪
Delete, Detail View
▪
user = models.OneToOneField(User, on_delete=models.CASCADE)
CASCADE : user 가 삭제될 때 profile도 같이 사라짐
•
Form
◦
Model Form
▪
profile form X → Model Form을 활용하여 적절한 Form 생성
from django.forms import ModelForm
from profileapp.models import Profile
class ProfileCreationForm(ModelForm):
class Meta:
model = Profile
fields = ['image', 'nickname', 'message']
Python
복사