27강 Authentication 인증시스템 구축

짜부·2023년 1월 25일

작정하고 장고

목록 보기
34/41

약간의 bug 수정
1. delete, update도 target_user설정
html도 user대신 target_user로 수정

context_object_name = 'target_user'
  1. pragmatic ulrs.py에서 account를 accounts로 수정
    나중에 사용할 함수가 이것이 기본세팅이여서 수정

CRUD 4가지를 사용해서 account앱을 만들었는데 몇가지 문제가 있음.

  1. hello_world를 들어갈 때 로그인 안되어있다면 로그인페이지로 바로 이동하도록 함
def hello_world(request):

    if request.user.is_authenticated: #유저가 접속했는지 확인할 수 있음
        ~~~~
        ~~~~
    else:
        return HttpResponseRedirect(reverse('accountapp:login'))
  1. 다른 user url로 들어가서 수정 및 삭제 할수 없도록 하기
    post인 메서드를 받을 때 와 아닐때를 나눴었는데 class base view에서는 get함수를 이용하여 나타냄.

updateview

    def get(self, *args, **kwargs):
        if self.request.user.is_authenticated:
            return super().get(*args,**kwargs)
        else:
            return HttpResponseRedirect(reverse('accountapp:login'))

    def post(self, *args, **kwargs):
        if self.request.user.is_authenticated:
            return super().get(*args,**kwargs)
        else:
            return HttpResponseRedirect(reverse('accountapp:login'))

-> 로그인 안하면 url검색해도 상세페이지 들어갈수 없음

또다른 문제점. 로그인 하고 나서는 내 계정이 아니라 다른 유저의 정보를 url 접속을 통해 수정 또는 삭제할 수 있음.
해결 법 구현
self.get_object()== self.request.user
self : 이 자체의 view를 가리킴
get_object() : 현재 사용되고 있는 object, user object중에서도 url에서 받은 pk에 해당하는 object(user)객체를 가져옴.

def get 메서드에 대해서 정확히 이해가 안됨. 그래서 질문을 찾아봄.


정리하자면 이미 UpdateView에 def get메서드가 선언 되어있음. 우리는 이 get 메서드를 조금 수정하고 싶어서 밑에 처럼 작성함.

profile
화이팅

0개의 댓글