Application/Python-Django

Django 에어비앤비 클론 4부 (21.12.06 ~ )

winney916 2021. 12. 6. 23:31
728x90

그 동안의 부단한 노력으로 실력이 많이 늘었다. 이제 이거 끝내고 AWS배포를 배운 후, Djago API를 사용한 React Native 앱을 만들어보자.

 

# 23 Room update

- 수정 화면 접근 보안성 강화하기

1) 버튼 숨기기 with 조건문

{% if room.host == user %}
  <a href="{% url 'rooms:edit' room.pk %}" class="btn-link block">Edit room</a>
{% endif %}

ui상에서는 막아지는데 url로 접근하는 똑똑이들을 막을 수 없다.

 

2) 해당 view에 get_object 추가한 뒤, Http404 raise하기

def get_object(self, queryset=None):
  room = super().get_object(queryset=queryset)
  if room.host.pk != self.request.user.pk:
  	raise Http404
  return room

get_object는 update_view의 메소드인데 (room_edit을 담당하는 view클래스에 상속시켰음)

display에서 보여주는 objects를 return한다.

해당 오브젝트(room)의 호스트와 접근한 유저의 pk값이 다르다면

Http404 에러를 raise하는 방식으로 처리했다. ( from django.http.response import http404 )

니꼬쌤은 "여기 있으면 안됩니다"등의 메시지를 띄우기보다는 걍 날려버리라고 한다 ㅋㅋㅋ

 

- 로그인 여부 파악하기

from django.contrib.auth.decorators import login_required

@login_required

이렇게 장고에서 제공하는 데코레이터를 사용하면 된다. 

https://docs.djangoproject.com/en/3.2/topics/auth/default/#the-login-required-decorator

 

Using the Django authentication system | Django documentation | Django

Django The web framework for perfectionists with deadlines. Overview Download Documentation News Community Code Issues About ♥ Donate

docs.djangoproject.com

settings.py 에서 Login_url을 지정해주면 로그인이 안된 상황에 해당 모델이 적용된 url로 접근할 경우 login_url로 보내버린다.