안녕하세요 ◠‿◠ 고고입니다.
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. 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.1:8000/admin에서 이런 화면을 볼 수 있습니다. 터미널에서 admin 계정을 만들어야 로그인 할 수 있습니다.
$ mysite (venv) python manage.py createsuperuser
Username과 Password를 입력합니다.
이제 admin에서 로그인할 수 있습니다.
4. 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
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/<int:pk>', 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/<id: Int>로 이동해야 합니다.
127.0.0.1:8000/post/1 에 가니
DELETE, PATCH 버튼이 더 생겼습니다.
django rest framework의 viewsets로 빠르게 CRUD를 만들어보았습니다.
'기타' 카테고리의 다른 글
3개월 공부해서 방통대 3학년으로 편입하기 - 학점은행제 (0) | 2024.07.31 |
---|---|
독일어 특수문자(움라우트, 에스체트) 입력 방법 (0) | 2022.08.26 |
맥북 개발환경 세팅 (0) | 2021.12.25 |
수박게임 개인 도메인에 배포하기 (0) | 2021.11.03 |
댓글