Project using python/Cloning Airbnb

django delete-photo by FBV

Cog Factory 2021. 3. 12. 11:47

url 설정

config/urls.py

urlpatterns = [
    path("rooms/", include("rooms.urls", namespace="room"))
]

rooms/urls.py

from django.urls import path
from . import views

app_name = "rooms"

urlpatterns = [path(
        "<int:room_pk>/photos/<int:photo_pk>/delete/",
        views.deletePhoto,
        name="delete-photo",
    )]

FBV(Function Based View)

rooms/views.py

# rooms/views.py

from django.shortcuts import render, redirect, reverse
from django.contrib import messages
from django.contrib.auth.decorators import login_required
from django.http import Http404

from photos import models as photo_models
from users.exception import HostOnly

@login_required
def deletePhoto(request, room_pk, photo_pk):
    try:
        if not request.session.get("is_hosting"):
            raise HostOnly("Page Not Found")

        photo = photo_models.Photo.objects.get_or_none(pk=photo_pk)
        if photo is None:
            messages.error(request, "Photo does not exsit")
            return redirect(reverse("core:home"))
        if request.user.pk != photo.room.host.pk:
            raise Http404("Page Not Found")
        photo.delete()
        messages.success(request, f"Delete {photo} successfully")
        return redirect(reverse("rooms:photo-list", kwargs={"pk": room_pk}))
    except HostOnly as error:
        messages.error(request, error)
        return redirect(reverse("core:home"))

참고 자료

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

소스 코드

github.com/zpskek/airbnb-clone-v3/commit/10dacd7153983f8ec2d015086ccd18073f030073