on
[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