-
django edit photo by FBVProject using python/Cloning Airbnb 2021. 3. 12. 10:31
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>/edit/", views.editPhoto, name="edit-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 . import models as room_models from photos import models as photo_models from users.exception import HostOnly @login_required def editPhoto(request, room_pk, photo_pk): if request.method == "GET": try: if not request.session.get("is_hosting"): raise HostOnly("Page Not Found") room = room_models.Room.objects.get_or_none(pk=room_pk) if room is None: messages.error(request, "Room does not exist") return redirect(reverse("core:home")) if request.user.pk != room.host.pk: raise Http404("Page Not Found") photo = room.photos.get(pk=photo_pk) return render( request, "pages/rooms/photos/edit_photo.html", context={"room": room, "photo": photo}, ) except HostOnly as error: messages.error(request, error) return redirect(reverse("core:home")) elif request.method == "POST": try: if not request.session.get("is_hosting"): raise HostOnly("Page Not Found") caption = request.POST.get("caption") room = room_models.Room.objects.get_or_none(pk=room_pk) photo = room.photos.get(pk=photo_pk) photo.caption = caption photo.save() messages.success(request, f"Edit {caption}-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"))
templates
pages/rooms/photos/edit_photo.html
{% extends 'base.html' %} {% block page_title %} Edit {{room.name}}'s Photo {% endblock page_title %} {% block search-bar %} <div></div> {% endblock search-bar %} {% block content %} <div class="background"> <div class="wrap"> <h1 class="text-3xl font-bold pb-6 pt-3 text-center">Edit Photo('{{photo}}')</h1> <form method="post" class="form" enctype="multipart/form-data"> {% csrf_token %} <div class="form_input rounded-lg flex"> <label for="caption">Caption:</label> <input type="text" id="caption" name="caption" placeholder="Caption" value="{{photo}}" required> </div> <button class="form_button">Edit</button> </form> <button class="button bg-gray-700"> <a href="{% url 'rooms:photo-list' room.pk %}">Back</a> </button> </div> </div> {% endblock content %}
참고 자료
- 노마드 코더의 Airbnb 클론 강의
소스 코드
github.com/zpskek/airbnb-clone-v3/commit/b5c45e7392fe48c76a30673c1eb0b53b913f89df
'Project using python > Cloning Airbnb' 카테고리의 다른 글
django delete-photo by FBV (0) 2021.03.12 django edit-photo by CBV (0) 2021.03.12 django create-photo by CBV (0) 2021.03.12 django create-photo by FBV (0) 2021.03.12 django photo list by CBV (0) 2021.03.11