20210920~20210926 TIL
추석 연휴가 있던 터라, 개발 공부가 많이 더뎌졌다. 공부를 안했던 건 아닌데, TIL을 작성하는 것이 귀찮았다라는 '변명'을 남겨놓게 된다.
이에 대해 무척 반성하고 있다.
1.Django
<inflearn '작정하고 장고' 강의 참조>
20210920
a. account 계정 작업으로 create, update view 구현에 대해서 알게 되었다.
b. login, logout view 구현에 대해 알게되었다.
** login이나 logout을 하고나면 , 이전 사이트로 redirect 되어야 하는데, 이에 대한 메서드 방식을 'get' 방식으로 구현해준다.
ex) http://.../.../login/?next=/accounts/detail/1
20210922
a. bootstrap form 적용
b. detailView 를 구현하여 로그인된 user를 조회하기 위한 개인페이지 구현에 대해 알게되었다.
** 각각의 user는 고유한 pk(primary key)를 부여받게 되는데, 로그인된 user만이 detailview로 작성된 개인페이지를 확인할 수 있게 하기 위함이다.
path('detail/<int:pk>', AccountDetailView.as_view(), name='detail'),
** 타인의 정보를 조회하기 위해서는 각 user의 데이터를 요청하는 변수를 추가시켜주어야 하는데, context_object_name을 설정해주어 각각의 페이지에서 알맞은 데이터를 요청할 수 있도록 해준다.
class AccountDeleteView(DeleteView):
model = User
context_object_name = 'targetUser'
.
.
.
20210923
a. updateView 구현, field 비활성화에 대한 구현을 배웠다.
b. deleteView 구현으로 '회원 탈퇴'기능을 배웠다.
20210925
a. Authentication(인증) 시스템을 구축하는 방식을 배우게 되었다.
허가된 user만이 웹페이지에 접근할 수 있도록 하고, 허가되지 않은 user는 login 페이지로 redirect 하는 방식을 배웠다.
def get(self, *args, **kwargs):
if self.request.user.is_authenticated and self.get_object() == self.request.user:
return super().get(*args,**kwargs)
else:
return HttpResponseForbidden()
여기서 self는 view에 작성된 class이며 class로 얻어진 객체(object)가 요청한 user와 같다면 페이지에 접속 가능하게 하고,
다를 겨우에는 Forbidden 페이지로 접근을 제한시킨다.
20210926
b. 'Decorator' 에 대해 알게 되었다.
Decorator 란?
python에서 제공하는 여러가지 기능들이 반복적으로 작성이 될 경우, 가독성을 저하시키는 것을 방지하기 위하여 사용되는 django의 라이브러리다. 기본적으로 @### 의 형태로 decorator를 작성한다.
기본적으로 제공하는 decorator(login_required 등) 도 있지만, 일반적인 함수(def) 가 아닌 class view 방식, 즉, method 에서 사용할 수 있는 method_decorator를 구현한다.
#decorators.py
from django.contrib.auth.models import User
from django.http import HttpResponseForbidden
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
앞전에 Authentication 을 배우면서 작성해줬던 코드들을 decorators.py에 작성하여 , decorator 기능을 view.py에 사용해주면 된다.
#views.py
has_ownership = [login_required,account_ownership_required]
.
.
.
@method_decorator(has_ownership,'post')
@method_decorator(has_ownership,'get')
decorator로 작성된 것들을 좀 더 가독성 향상을 위해 has_ownership 이란 변수를 설정해주었다. 이때, 반드시 배열 형식의 '[ ]' 안에 넣어준다. 그렇게 되면, 쫌 더 깔끔하게 decorator를 작성할 수 있다.
'TIL' 카테고리의 다른 글
20211004 TIL (0) | 2021.10.04 |
---|---|
20210928~20210929 TIL (0) | 2021.10.01 |
20210918 TIL (0) | 2021.09.18 |
20210913 TIL (0) | 2021.09.13 |
20210909 TIL (0) | 2021.09.09 |