Web/Django
[Django] Instagram 클론 코딩(2)
exp9405
2020. 3. 19. 13:57
반응형
- views 설계하기
- URL 연결하기
<Views 설계>
-
class형 뷰의 generic view를 이용하여 구현
-
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 연결하기
-
photo의 urls.py 생성 ( instagram/photo/urls.py)
-
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 연결하기
-
config의 url.py에 작성(instagram/config/urls.py)
-
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를 통해서 해당 주소로 연결시켜준다.
-
가장 기본 주소가 들어오면 photo의 url로 연결
반응형