20210920~20210926 TIL

2021. 9. 28. 18:20

추석 연휴가 있던 터라, 개발 공부가 많이 더뎌졌다. 공부를 안했던 건 아닌데, 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

BELATED ARTICLES

more