Django에서 게시판을 만드는 방법은 크게 아래 두가지 방향으로 구현이 가능하다.
- Django의 Paginator (django.core.paginator import Paginator)
- DRF(Django Rest Framework)의 Pagination(rest_frameowork.pagination)
두 방식은 각기 장단점이 있으며, 서비스(기능) 중심으로 더 결이 잘 맞는 적절한 방향을 정하는 것이 좋다.
해당 글은 Django의 Paginaotor를 이용해 Pagination을 구현하는 방법을 설명한다.
1. Project, App 생성
django-admin startproject pagination1
django-admin startapp posts
2. settings.py
INSTALLED_APPS = [
....,
'posts',
'rest_framework',
]
3. models.py
from django.db import models
# Create your models here.
class Post(models.Model):
class Meta:
db_table = "article"
title = models.CharField(max_length=256)
content = models.CharField(max_length=256)
4-1. pagination1 / urls.py
# pagination1/urls.py
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('posts/', include('posts.urls')),
]
4-2. posts / urls.py
# posts/urls.py
from django.urls import path
from . import views
urlpatterns = [
path('page/', views.expagination.as_view()),
]
5. serializers.py
from rest_framework import serializers
from .models import Post
class PostSerializer(serializers.ModelSerializer):
class Meta:
model = Post
fields = "__all__"
6. views.py
from django.core.paginator import Paginator
from rest_framework import status
from rest_framework.response import Response
from rest_framework.views import APIView
from .models import Post
from .serializers import PostSerializer
# url : posts/page/1
class DjangoPagination(APIView):
def get(self, request):
# pagination
page = request.GET.get("page", 1) # 내가 로드하고자 하는 Page
posts = Post.objects.all() # 전체 Load
paginator = Paginator(posts, 3) # 한 페이지에 3개를 넘겨주는 paginator
post_per_page = paginator.get_page(page) # 데이터에서 3단위로 나눠진 페이지의 N번째 페이지
# serializer
results = PostSerializer(post_per_page, many=True).data
return Response(results, status=status.HTTP_200_OK)
7. admins.py
from django.contrib import admin
from posts.models import Post
admin.site.register(Post)
8. 명령어 실행
$ python manage.py makemigrations
$ python manage.py migrate
$ python manage.py createsuperuser
$ python manage.py runserver
9. Post 데이터 생성
admin 페이지에 접속하여 post 데이터 생성
API Test (Postman)
API Request
http://127.0.0.1:8000/posts/page?page=1
JSON Response
[
{
"id": 1,
"title": "aa",
"content": "aaaaaaaa",
},
{
"id": 2,
"title": "bb",
"content": "bbbbb",
},
{
"id": 3,
"title": "ccc",
"content": "ccccccccccc",
}
]
'Python > Django' 카테고리의 다른 글
[Django] 간단한 메일 전송 기능 구현 (by. Gmail ) (0) | 2022.11.18 |
---|---|
[Django] Pagination 방법 비교 (Feat. Django, DRF) (0) | 2022.11.10 |
[Django] Request 구조 분석 (with. DRF, Query-String vs Path-variables) (0) | 2022.08.22 |
[Django] Query Profiling Tool (3) - Silk (0) | 2022.08.12 |
[Django] Query Profiling Tool (1) - Django debug toolbar (0) | 2022.08.12 |