Cog Factory 2021. 3. 6. 18:09

session 이란?

  session은 browser가 아닌 server side에 client 정보를 담는 것을 말한다. Client 측에서 session 값을 저장하는 것을 cookie라고 한다. 하지만 django는 cookie의 user 정보를 담지 않고 session id만 저장하고 이 session id로 server에 있는 user의 정보와 communication을 한다.

  그래서 request는 session_key가 담겨져있다.

url 설정

config/urls.py

urlpatterns = [
    path("users", include("users.urls", namespace="users")),
]

users/urls.py

from django.urls import path
from . import views

app_name = "users"

urlpatterns = [path("switch-hosting/", views.switch_hosting, name="switch-hosting")]

{% url %}

  is_hosting은 user가 현재 상태가 host mode냐 아니냐를 결정한다. host mode일 때는 create room 기능을 제공하고 host mode가 아닐 때는 guest mode이므로 자신이 예약한 방을 볼 수있도록 한다.

session function

users/views.py

  request.session["is_hosting"]에 값이 할당 되어 있으면 del로 삭제를 하고 할당되어 있지 않다면 삭제할 것이 없기 때문에 KeyError가 발생해서 True 값을 할당한다.

from django.shortcuts import redirect, reverse, render

def switch_hosting(request):
    try:
        del request.session["is_hosting"]
    except KeyError:
        request.session["is_hosting"] = True
    return redirect(reverse("core:home"))

참고 자료

소스 코드

github.com/zpskek/airbnb-clone-v3/commit/a447960321cd1cb71b6a5247d702c94d3efcba2d