[Django] 간단한 CRUD 만들기

[Django] 간단한 CRUD 만들기

Post(id, content, imagePath)라는 객체를 CRUD(Crerate, Retreive, Update, Delete)할 수 있는 간단한 서버를 만들어보겠습니다.

사용 환경 : PyCharm

필요 사전 지식 : HTTP Method, HTTP Status Code

깃허브 소스 : https://github.com/Goeun1001/Django-Simple-CRUD

0. 최종 폴더 구조

1. django venv 설정

가상환경(virtualenv)를 설정합니다. 터미널의 앞에 (venv)가 있다면 가상환경에 있다는 뜻입니다.

$ python -m venv venv $ source venv/bin/activate

venv/bin/activate 가 되지 않는 경우 $ source venv/Scripts/activate 를 시도해보세요.

2. django 설치하기

우선 pip를 최신 버전으로 업그레이드 해줍니다. 이때, pip란 파이썬의 패키지들을 관리하는 매니저입니다. (npm 등과 비슷함.)

그 후 django를 설치합니다.

$ (venv) python -m pip install --upgrade pip $ (venv) pip install django $ (venv) pip install djangorestframework

django는 requirements.txt로 패키지 의존성을 관리합니다. pip install된 것을 requirements.txt에 적어놓습니다.

$ (venv) pip freeze > requirements.txt

결과 : (사람마다 버전이 다를 수 있습니다.)

--- requirements.txt --- Django==3.1.6 djangorestframework==3.12.4

requirements.txt에 있는 패키지를 전부 install하고싶다면

$ (venv) pip install -r requirements.txt

3. django 시작하기

mysite라는 프로젝트 만들기

$ (venv) django-admin startproject mysite $ (venv) cd mysite

Mysite라는 프로젝트가 만들어졌습니다.

django rest framework를 사용하기 위해서 mysite/settings.py의 INSTALLED_APPS에 ‘rest_framework’를 추가합니다.

migrate 및 runserver하기

$ mysite (venv) python manage.py migrate $ mysite (venv) python manage.py runserver

migrate 시 이 문구들과 함께 폴더 안에 db.sqlite3가 생성됩니다.

runserver 시 이런 문구가 뜨며 1270.0.0.1:8000에서 django 서버를 볼 수 있습니다.

127.0.0.1:8000 실행화면 :

admin 만들기

1270.0.01:8000/admin에서 이런 화면을 볼 수 있습니다. 터미널에서 admin 계정을 만들어야 로그인 할 수 있습니다.

$ mysite (venv) python manage.py createsuperuser

Username과 Password를 입력합니다.

이제 admin에서 로그인할 수 있습니다.

post라는 앱 만들기

$ mysite (venv) python manage.py startapp post

post라는 앱이 추가되었습니다. 앱은 프로젝트와는 조금 다른 파일 구조를 가지고 있습니다.

프로젝트에 앱을 적용시키기 위해 mysite/setting.py의 INSTALLED_APPS에 post앱을 추가해줍니다.

Post 모델 만들기

post/models.py 를 이렇게 수정합니다.

from django.db import models class Post(models.Model): id = models.AutoField title = models.CharField(max_length=20) content = models.CharField(max_length=100) imagePath = models.CharField(max_length=100) def __str__(self): return self.title

이것은 DB의 Post 테이블을 django ORM으로 만든 것입니다. 이것을 db.sqlite3에 적용시키기 위해서는 migration을 해야합니다.

$ mysite (venv) python manage.py makemigrations $ mysite (venv) python manage.py migrate

0001_initial.py에 Post 모델이 적용된 사진.

post 폴더 안에 serializers.py를 만들고 수정합니다.

Serializer란 모델 인스턴스를 JSON 형태 혹은 Dictionary 형태로 직렬화 할 수 있게 도와주는 것입니다.

from rest_framework import serializers from .models import Post class PostSerializer(serializers.ModelSerializer): class Meta: model = Post fields = ['id', 'title', 'content', 'imagePath']

post/views.py를 이렇게 수정합니다.

from rest_framework import viewsets from .models import Post from .serializers import PostSerializer class PostViewSet(viewsets.ModelViewSet): serializer_class = PostSerializer queryset = Post.objects.all() post_list = PostViewSet.as_view({ 'get': 'list', 'post': 'create', }) post_detail = PostViewSet.as_view({ 'get': 'retrieve', 'patch': 'partial_update', 'delete': 'destroy', })

views.py에서 django rest framework의 viewsets.ModelViewSet을 이용해서 CRUD를 쉽게 만들 수 있습니다.

post 앱에서 post/views.py의 view와 url을 연결시켜줍니다.

from django.urls import path from . import views urlpatterns = [ path('post', views.post_list), path('post/', views.post_detail), ]

mysite 프로젝트에 post의 url을 추가해줍니다. mysite/urls.py

from django.contrib import admin from django.urls import path from django.conf.urls import include urlpatterns = [ path('admin/', admin.site.urls), path('', include('post.urls')), ]

127.0.0.1:8000/에 들어가보면 post/urls.py가 적용된 것을 볼 수 있습니다.

127.0.0.1:8000/post에서 밑의 화면을 볼 수 있습니다.

django는 이렇게 화면을 제공합니다. 이제 여기서 새로운 post를 만들 수도 있고, 삭제할 수 있습니다.

Create(POST)

POST를 한 후 성공하였다면 HTTP 201 Created 상태 코드를 받습니다.

2. Get – Detail

다시 Get – List를 하면 이런 화면을 볼 수 있습니다.

모든 포스트들이 아닌, id가 1인 포스트만을 보고싶으면 127.0.0.1:8000/post/로 이동해야 합니다.

127.0.0.1:8000/post/1 에 가니

DELETE, PATCH 버튼이 더 생겼습니다.

django rest framework의 viewsets로 빠르게 CRUD를 만들어보았습니다.

from http://gogo-ios.tistory.com/6 by ccl(A) rewrite - 2021-11-04 11:00:54