20210920~20210926 TIL

20210920~20210926 TIL

추석 연휴가 있던 터라, 개발 공부가 많이 더뎌졌다. 공부를 안했던 건 아닌데, TIL을 작성하는 것이 귀찮았다라는 '변명'을 남겨놓게 된다.

이에 대해 무척 반성하고 있다.

1.Django

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/', 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를 작성할 수 있다.

from http://cozzilzzil2.tistory.com/14 by ccl(A) rewrite - 2021-09-28 18:26:33