코딩한걸음
Published 2023. 4. 28. 10:40
[DRF] App생성과 세팅 Python/Django
728x90
반응형
💡
이 포스팅은 window, vscode 기준으로 작성되었습니다.

앱 만들기

articles 앱 생성

## console
python manage.py startapp articles

장고에 등록

## drf_project/settings.py
INSTALLED_APPS = [
    "django.contrib.admin",
    "django.contrib.auth",
    "django.contrib.contenttypes",
    "django.contrib.sessions",
    "django.contrib.messages",
    "django.contrib.staticfiles",
    'rest_framework',
    'articles',
]

모델 생성

## articles/models.py
class Article(models.Model):
    title = models.CharField(max_length=100)
    content = models.TextField()
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

생성한 모델을 DB에 등록

## console
python manage.py makemigrations
python manage.py migrate

DB에 articles가 추가되었다

관리 페이지에 Article모델을 추가

## articles/admin.py
from django.contrib import admin
from articles.models import Article

admin.site.register(Article)

관리 페이지

관리자 생성

## console
python manage.py createsuperuser
python manage.py runserver

적당히 관리자 아이디를 만들어준다

관리자 페이지 접속

생성한 관리자 아이디를 입력

게시글 작성

게시글 작성

그냥 article object로만 보인다

DB에도 생성된 것을 확인

  • article object 대신 글 제목이 보이게 하기
## articles/models.py
from django.db import models

# Create your models here.

class Article(models.Model):
    title = models.CharField(max_length=100)
    content = models.TextField()
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    def __str__(self):
        return str(self.title)

views.py에 연결

## articles/views.py
from rest_framework.response import Response

def index(request):
    return Response("연결되었습니다.")

urls.py 연결

## drf_project/urls.py
from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path("admin/", admin.site.urls),
    path("articles/", include("articles.urls"))
]

## articles/urls.py
from django.urls import path
from articles import views

urlpatterns = [
    path('index/', views.index, name='index'),
]

메소드 등록

http://127.0.0.1/index/ 에 들어가보면

이런 에러가 뜬다. 어떤 메소드로 요청을 받을건지 안 정해서 생기는 오류

## articles/views.py
from rest_framework.response import Response
from rest_framework.decorators import api_view

@api_view(["GET","POST"])
def index(request):
    return Response("연결되었습니다.")

이렇게 GET과 POST를 지정해주면

Django REST framework에서 지원하는 페이지가 보인다

article 불러오기

## articles/views.py
from rest_framework.response import Response
from rest_framework.decorators import api_view
from articles.models import Article

@api_view(["GET", "POST"])
def index(request):
    articles = Article.objects.all()
    return Response(articles)

articles를 지정하고 Response에 넣어보면

이런 에러 페이지가 뜬다. 읽어보니 object type을 JSON으로 해달라는 것 같다

## articles/views.py
from rest_framework.response import Response
from rest_framework.decorators import api_view
from articles.models import Article

@api_view(["GET", "POST"])
def index(request):
    articles = Article.objects.all()
    article = articles[0]
    article_data = {
        "title": article.title,
        "content": article.content,
        "created_at": article.created_at,
        "updated_at": article.updated_at,
    }
    return Response(article_data)

이렇게 json형태로 보내주면 정상 작동함을 알 수 있다.

근데 지금은 article이 하나라서 상관없지만

계속 이런 노가다를 거쳐서 할 수는 없다

drf에서는 이런 불편점을 serializer를 통해 간단하게 할 수 있다

다음 포스팅에서는 serializer에 대해 다뤄볼 예정이다


Uploaded by N2T

728x90
반응형
profile

코딩한걸음

@Joonyeol_Yoon

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!