Project using python/Cloning Airbnb

django user profile CBV

Cog Factory 2021. 3. 4. 11:34

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("login/", views.LoginView.as_view(), name="login")]

{% url %}

  url template tag를 이용해서 signup page로 갈 수 있게 한다. {% url 'users:login' %}은 /users/login과 같다.

CBV(Class Based View)

users/views.py

  CBV는 django에서 정의한 여러가지 View들을 이용한다. 그 중 DetailView를 이용해서 User Profile을 작성한다. 여기서 반드시 필요한 attribute는 model이다.

  • model : page를 구성할 main model이다.
  • context_object_name : model의 이름을 정의한다.
  • template_name : rendering할 template이다.
  • def get_context_data() : "user_obj" 이외에도 추가로 client에 context를 만들 수 있다.
from django.views.generic import DetailView


class UserProfileView(mixins.LoginOnlyView, DetailView):

    """ User Profile View """

    model = models.User
    context_object_name = "user_obj"
    template_name = "pages/users/userDetail.html"

    def get_context_data(self, **kwargs):
        context = super().get_context_data()

        page = int(self.request.GET.get("page", 1))
        page_sector = ((page - 1) // 5) * 5

        user_obj = context["user_obj"]
        qs = user_obj.rooms.all()
        paginator = Paginator(qs, 12, orphans=6)
        rooms = paginator.get_page(page)

        context["page_sector"] = page_sector
        context["rooms"] = rooms
        return context

참고 자료

  • 노마드 코더의 Airbnb 클론 강의
  • DetailView

소스 코드

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