Web/Django

[Django] Instagram 클론 코딩(2)

exp9405 2020. 3. 19. 13:57
반응형
  • views 설계하기
  • URL 연결하기

<Views 설계>

  1. class형 뷰의 generic view를 이용하여 구현

  2. ListView/CreateView/UpdateView/DeleteView/DetailView 구현

(instagram/photo/views.py)

from django.shortcuts import render
from django.views.generic.list import ListView
from django.views.generic.edit import UpdateView, CreateView, DeleteView
from django.views.generic.detail import DetailView
from .models import Photo

# class형 뷰의 generic view를 이용하여 구현
# ListView/CreateView/UpdateView/DeleteView/DetailView 구현

class PhotoList(ListView):
    model = Photo
    template_name_suffix = '_list'
#PhotoList:가장 메인에서 보여줄 로직 / 모델을 불러와서 데이터를 활용할 것이라고 기제
class PhotoCreate(CreateView):
    model = Photo
    fields = ['text', 'image']
    template_name_suffix = '_create'
    success_url = '/'

# PhotoCreate:
# 모델을 활용하는데생성할 때 채워야 할 필드 확인이후 연결될 템플릿 이름은 Photo_create 일 것이다.
#성공하면 메인 페이지로 돌아가도록 연결(이후 url로 연결)

class PhotoUpdate(UpdateView):
    model = Photo
    fields = ['text', 'image']
    template_name_suffix = '_update'
    success_url = '/'

#photoUpdate : Create와 동일

class PhotoDelete(DeleteView):
    model = Photo
    template_name_suffix = '_delete'
    success_url = '/'

class PhotoDetail(DetailView):
    model = Photo
    template_name_suffix = '_detail'

#PhotoDelete와 PhotoDetail
#삭제와 상세페이지는 특별한 로직이 필요하지 않음
#템플릿과 연결을 잘 시킬 수 있도록

 

 

<URL 연결하기>

 

- Photo URL 연결하기

  1. photo의 urls.py 생성 ( instagram/photo/urls.py)

  2. URL 작성하기

from django.urls import path
from .views import PhotoList, PhotoDelete, PhotoDetail, PhotoUpdate, PhotoCreate

app_name = "photo"
#app_name 설정을 통해 namespace(이름공간)확보
#다른 앱들과 url pattern 이름이 겹치는 것을 방지하기 위해 사용한다.

urlpatterns = [
    path("create/", PhotoCreate.as_view(), name = 'create'),
    path("delete/<int:pk>/", PhotoDelete.as_view(), name = 'delete'),
    path("update/<int:pk>/", PhotoUpdate.as_view(), name = 'update'),
    path("detail/<int:pk>/", PhotoDetail.as_view(), name = 'detail'),
    path("", PhotoList.as_view(), name = 'index'),
]

 

 

- Config URL 연결하기

  1. config의 url.py에 작성(instagram/config/urls.py)

  2. 2차 URL을 설정한 이후에 가장 기본이 되는 URL과 연결시켜준다.

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('photo.urls')),
]

include를 통해서 해당 주소로 연결시켜준다.

  1. 가장 기본 주소가 들어오면 photo의 url로 연결

반응형