본문 바로가기

백엔드/Django7

[Django] 접근 제어 유저 기능이 구현된 프로젝트에서 로그인이 된 유저가 글을 작성할 때, 그 유저에 대한 정보가 글에 함께 저장되도록 합시다. 그리고 거기에 추가적으로 '로그인을 해야 글을 작성할 수 있고', '내가 작성한 글만 수정, 삭제를 할 수 있도록' 하는 기능을 추가해봅시다. 유저가 서버로 보내는 request 처리 과정에서 view에 Mixin이라는 것을 설치하고 이 Mixin에 접근 제어와 관련된 로직들을 추가하면, 로그인이 되어 있지 않은 경우 다른 페이지로 redirect하거나 forbidden response를 돌려주는 등의 일을 수행할 수 있습니다. Mixin은 보통 기존의 클래스에 어떤 기능을 더해줄 때 쓰이는 개념인데, 따라서 뷰 함수가 아닌 뷰 클래스에서만 적용될 수 있습니다. 이러한 접근 제어와 .. 2021. 11. 4.
[Django] allauth 패키지 django-allauth 패키지란? 장고에서 유저 기능 구현을 위해 쓰이는 패키지 입니다. 장고에서 제공하는 것들 중 django.contrib.auth와 django-allauth가 있는데요, 이 둘의 차이는 다음과 같습니다. django.contrib.auth : 장고에 포함되는 앱으로, 내부적으로 urls, views, forms, models가 있습니다. AbstractUser : django.contrib.auth에서 제공하는 유저 모델로, username, password, first_name, last_name, email 등의 필더들을 미리 제공하고, 추가적인 필드도 커스터마이징 할 수 있습니다. AbstractBaseUser : 역시 django.contrib.auth에서 제공하는 유저.. 2021. 10. 25.
[Django] 제네릭 뷰 제네릭 뷰(Generic View)란? 지금까진 views.py 파일을 함수형 뷰로 기능들을 하나하나 구현했지만, 제네릭 뷰라는 장고 개발자분들이 미리 개발한 뷰를 상속받아 클래스형 뷰를 만듬으로써 글들의 조회/생성/수정/삭제를 좀 더 간단하게 만들 수 있습니다. 한번 하나하나 알아봅시다. 먼저 받아와야할 모듈들을 가져옵시다. from django.views.generic import ( ListView, CreateView, DetailView, UpdateView, DeleteView, ) from django.urls import reverse from .models import Page from .forms import PageForm 글 목록 페이지 class PageListView(ListVi.. 2021. 10. 11.
[Django] 페이지네이션(Pagination) 기능 페이지네이션 이란? 장고에서는 한 페이지에서 표시할 데이터가 너무 많을 때, 데이터를 일정 개수로 나눠 여러 페이지에 나눠 표시해주는 기능을 가지고 있는데, 이를 페이지네이션이라고 합니다. 예를 들어, 블로그의 전체글 리스트의 url은 글들이 많아지면 여러 페이지로 구성되게 되는데요, https://tomatobaconsoup.tistory.com/?page=1 https://tomatobaconsoup.tistory.com/?page=2 이처럼 url의 맨 뒤에 'page='로 페이지 구분을 하게 됩니다. 바로 페이지네이션을 하는 방법에 대해 알아봅시다. 먼저 Paginator와 모델을 임포트 해줍니다. from django.core.paginator import Paginator from my_app.. 2021. 10. 10.
[Django] 폼(Form)에 관하여 From 이란? 폼은 사용자가 입력한 데이터를 서버로 전송하기 위한 방식입니다. 이렇게 사용자의 데이터를 입력 받을 수 있는 양식이라는 것이 존재하고, 데이터를 입력하게 되면 폼의 내부 전송 방식에 따라 서버로 데이터를 보내게 됩니다. form html 코드의 예시를 한번 볼까요? {% csrf-token %} 이름 생일 각각의 입력란이 태그와 의 태그의 쌍으로 이루어져 있는 것을 확인할 수 있습니다. 위에서 확인할 수 있는 키워드들은 다음과 같습니다. for, id : 태그의 for 속성과 태그의 id 속성은 이 두 태그를 쌍으로 묶어주기 위한 식별자 같은 것입니다. name : name 속성은 데이터들이 서버로 전송될 때, 데이터들을 구분하기 위한 값으로 꼭 필요한 요소입니다. type : 입력할 값.. 2021. 10. 5.
[Django] MVT 구조 MVT 구조란? MVT 구조는 장고의 아키텍쳐 패턴으로 Model, View, Template로 구성됩니다. 각각의 역할을 다음과 같습니다. Model : 데이터의 구조를 생성하고 데이터베이스와 소통하는 CRUD의 역할을 합니다. 대표적으로 프로젝트 디렉토리 내의 models.py 파일이 이 역할을 수행합니다. View : 웹 사이트의 로직을 담당하며, Modle과 Template 사이를 연결합니다. 프로젝트 디렉토리 내의 views.py 파일이 이 역할을 수행합니다. 좀 더 자세히 말하자면 들어온 요청에 대해 Model에서 데이터를 받아 가공한 후, 그 데이터에 따라 Template를 적절히 렌더링 해 최종적으로 클라이언트에게 응답하는 것이죠. Template : 웹 사이트의 화면 구성을 담당합니다. .. 2021. 10. 2.