ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Django 초간단 게시판 4. view, urls
    Python/초간단 장고 Django 2021. 5. 28. 02:07
    반응형

    1. view

    초간단 버전 답게 모두 클래스 뷰이다. 

    리스트뷰를 상속받아 리스트를 만들고, 
    디테일뷰를 상속받아 디테일을 만들고...
    .....

    장고에서는
    작성하고, 읽고, 수정하고, 지우는 데 필요한
    기본적인 클래스가 모두 제공된다. 

    기본적으로 모델만 등록하고
    몇 가지 설정만 추가로 잡아주면 된다. 

    # board/views.py
    
    from django.urls import reverse_lazy
    from django.views.generic import ListView, CreateView, DetailView, UpdateView, DeleteView
    
    from .models import Article
    
    
    class ArticleList(ListView):
        model = Article
        paginate_by = 5
        ordering = ['-id']
    
    
    class ArticleCreate(CreateView):
        model = Article
        fields = ['title', 'author', 'content']
        success_url = reverse_lazy('index')
    
    
    class ArticleDetail(DetailView):
        model = Article
        # context_object_name = 'article'
    
    
    class ArticleUpdate(UpdateView):
        model = Article
        fields = ['title', 'author', 'content']
        success_url = reverse_lazy('index')
    
    
    class ArticleDelete(DeleteView):
        model = Article
        success_url = reverse_lazy('index')

    리스트 뷰의 필수(?) 요소는 ordering 이다.
    설정하지 않아도 작동은 하지만
    UnorderedObjectListWarning 경고가 계속 발생한다. 
    기본 순서가 없는 모델에서 발생하는 경고. 

    page 처리는 직접 처리하기가 꽤 까다롭다.

    장고에서는 paginate_by 설정만 해주면,
    page 처리가 (템플릿도 꽤 만져줘야 하지만) 가능하다. 
    (필수는 아님)

    생성과 수정은
    에디팅할 필드 설정과 
    생성 또는 수정이 끝났을 때 
    돌아갈 URL 설정이 필수이다. 

    지움도 지움이 성공한 뒤
    돌아갈 URL을 설정해야 한다. 

     

    2. urls

    board 폴더의 urls.py를 수정하자. 

    # board/urls.py
    
    from django.urls import path
    
    from .views import ArticleList, ArticleDetail, ArticleDelete, ArticleCreate, ArticleUpdate
    
    urlpatterns = [
        path('', ArticleList.as_view(), name='index'),
        path('create/', ArticleCreate.as_view(), name='create'),
        path('<int:pk>/', ArticleDetail.as_view(), name='detail'),
        path('<int:pk>/update/', ArticleUpdate.as_view(), name='update'),
        path('<int:pk>/delete/', ArticleDelete.as_view(), name='delete'),
    ]
    

    <int:pk>에서 int를 빼면
    create/, admin/과 충돌을 일으킨다. 

    int를 명시하면, 숫자는 pk로,
    문자는 다른 주소로
    교통정리 되기 때문에
    충돌을 일으키지 않는다. 

    invalid literal for int() with base 10: 'favicon.ico'
    이 에러를 처음 봤을 때 황당함이란.. 
    왠 favicon.ico인가... 했었다... 

    반응형
Designed by Tistory.