장고 프로젝트 기본 설정

qq·2023년 8월 7일

Django

목록 보기
2/3

https://codemonkyu.tistory.com/entry/Djnago-Django-rest-framework-활용하여-API-서버-만들기

  1. 프로젝트를 관리할 빈 폴더를 생성한다

  2. 생성한 폴더에서 가상환경을 생성하고 실행한다

    가상환경 디렉터리 내에서 실행한다!

python -m venv [가상환경 이름]

#windows
[가상환경 이름]/scripts/activate.bat 실행
  1. 필요한 패키지 설치하기
pip install django

pip install djangorestframework
  1. Django project 생성하기 & Django app 생성하기

    꼭 가상환경 디렉터리에서 빠져나온 후에 진행한다

    # django-admin startproject [프로젝트이름] .
    django-admin startproject mydjango .
    
    # python manage.py startapp [앱이름]
    python manage.py startapp api
    
    #가상환경 들어가기
    source myvenv/Scripts/activate

Settings.py 설정하기-mydjango 프로젝트의 settings.py에 들어가 필요한 부분을 설정을 해준다.

ALLOWED_HOSTS = ["*"]

# 생성한 api앱과 rest_framework를 추가해준다.
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'api',
    'rest_framework'
]

#언어를 한국어로 변경해준다.
LANGUAGE_CODE = 'ko'

#시간
TIME_ZONE = 'Asia/Seoul'
  1. manage.py가 있는 디렉터리에서 작업

    python manage.py makemigrations
    python manage.py migrate
    python manage.py runserver

    추가설명

    • makemigrations : 모델 변경사항 감지 및 기록
    • migrate : 변경사항을 DB에 적용 (Django는 dbsqlite3 를 기본 db로 제공한다)

REST API MODEL 만들기

models.py에서 모델 클래스를 설정하면 데이터베이스에 테이블이 생성되는 것이다.

from django.db import models

# Create your models here.
class Item(models.Model):
    name = models.CharField(max_length=100)
    description = models.TextField(max_length=300)
    cost = models.IntegerField()
CharField제한된 문자열 필드 타입. 최대 길이를 max_length 옵션에 지정해야 한다. 문자열의 특별한 용도에 따라 CharField의 파생클래스로서, 이메일 주소를 체크를 하는 EmailField, IP 주소를 체크를 하는 GenericIPAddressField, 콤마로 정수를 분리한 CommaSeparatedIntegerField, 특정 폴더의 파일 패스를 표현하는 FilePathField, URL을 표현하는 URLField 등이 있다.
TextField대용량 문자열을 갖는 필드
IntegerField32 비트 정수형 필드. 정수 사이즈에 따라 BigIntegerField, SmallIntegerField 을 사용할 수도 있다.
BooleanFieldtrue/false 필드. Null 을 허용하기 위해서는 NullBooleanField를 사용한다.
DateTimeField날짜와 시간을 갖는 필드. 날짜만 가질 경우는 DateField, 시간만 가질 경우는 TimeField를 사용한다.
DecimalField소숫점을 갖는 decimal 필드
BinaryField바이너리 데이타를 저장하는 필드
FileField파일 업로드 필드
ImageFieldFileField의 파생클래스로서 이미지 파일인지 체크한다.
UUIDFieldGUID (UUID)를 저장하는 필드

필드 옵션설명 💻

null (Field.null)null=True 이면, Empty 값을 DB에 NULL로 저장한다. DB에서 Null이 허용된다. 예: models.IntegerField(null=True)
blank (Field.blank)blank=False 이면, 필드가 Required 필드이다. blank=True 이면, Optional 필드이다. 예: models.DateTimeField(blank=True)
primary_key (Field.primary_key)해당 필드가 Primary Key임을 표시한다. 예: models.CharField(max_length=10, primary_key=True)
unique (Field.unique)해당 필드가 테이블에서 Unique함을 표시한다. 해당 컬럼에 대해 Unique Index를 생성한다. 예: models.IntegerField(unique=True)
default (Field.default)필드의 디폴트값을 지정한다. 예: models.CharField(max_length=2, default="WA")
db_column (Field.db_column)컬럼명은 디폴트로 필드명을 사용하는데, 만약 다르게 쓸 경우 지정한다.
  1. 만들어 놓은 앱 폴더 내에 serializers.py 생성해준다

    serialiezer란 장고 모델 데이터를 json타입으로 바꿔주는 작업을 해준다. 즉 직렬화 작업을 해준다.

장고 모델 데이터를 json으로 바꿔주면 api 통신을 할 때 훨씬 편하게 작업할 수 있다.

  • app 폴더 내에 serializers.py를 만든다.
  • 설치한 rest_framework에서 serializers를 import한다.
  • 설정한 models.py의 Item class를 import한다.
from rest_framework import serializers
from .models import Item

class ItemSerializer(serializers.ModelSerializer):
    class Meta:
        model = Item
        fields = ("__all__")
        #fields = ('name', 'description', 'cost')
  1. Viewset 생성

    • 만들어 놓은 앱 폴더 내에 views.py에 작성한다.
    • ModelViewSet은 기본적으로 CRUD를 지원한다.
    • 모델명.objects.all() : 해당 모델에 존재하는 테이블의 데이터를 전부 갖고 오겠다는 뜻이다.
    • serializer_class: 위에서 생성한 ItemSerializer를 사용하겠다는 뜻이다.
    from django.shortcuts import render
    from rest_framework import viewsets
    from .serializers import ItemSerializer
    from .models import Item
    
    # Create your views here.
    class ItemViewSet(viewsets.ModelViewSet):
        queryset = Item.objects.all()
        serializer_class = ItemSerializer

4.Router등록

만들어 놓은 앱 폴더 내에 urls.py를 생성한다. #api/urls.py

from django.urls import include, path
from rest_framework import routers
from . import views #views.py import

router = routers.DefaultRouter() #DefaultRouter를 설정
router.register('Item', views.ItemViewSet) #itemviewset 과 item이라는 router 등록

urlpatterns = [
    path('', include(router.urls))
]

만들어 놓은 프로젝트 폴더내에 urls.py를 설정해준다. #mydjango/urls.py

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('api.urls')), #api/urls.py 를 사용
]
profile
백엔드 개발자

0개의 댓글