프레임워크를 이용한 작업을 제대로 하게된것은 이번이 처음이였는데 확실히 어려웠습니다. 처음에는 정상적으로 기능하는 사이트 하나 띄우는데 거의 반나절씩 걸렸으나 계속 진행하다 보니 완벽하진 않더라도 어느정도 장고라는 프레임워크의 구조와 작동방식이 눈에 들어오게 되었던 것 같습니다.
장고는 다른 프레임워크와는 다르게 많은 기능을 기본으로 제공하고 있습니다. 그 중 가장 대표적인게 관리자 기능이 있고, 그 외에 import
를 통해 가져올 수 있는 함수도 굉장히 많습니다.
처음 프로젝트를 생성하면 폴더안에 settings
라는 파일이 있는데 이 파일은 이 프로젝트 전체의 환경설정을 관리합니다. 기능을 위한 폴더를 하나씩 추가할 때마다 settings
안에 INSTALLED_APPS
라는 공간에 기입을 해주어야 합니다. 그리고 templates
폴더를 만들어 html
파일을 관리하고자 한다면 settings
파일 안에 TEMPLATES
항목을 찾아가 DIRS : []
라는 부분 대괄호 안에 templates
를 입력해주면 됩니다. 그리고 settings
파일 안에는 장고 시크릿 키가 들어있으니 깃허브에 푸시하거나 배포할 때 같이 올라가지 않도록 .env
를 이용해 관리해 주시는 것을 권장드립니다.
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'user',
'erp',
]
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': ['tamplates'],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
urls.py
는 프로젝트의 url
즉 api
를 관리합니다. urlpatterns
라는 곳에 기입을 하게되는데 프로젝트를 만들면 path('admin/', admin.site.urls)
라는 항목이 이미 작성되어 있습니다. 이는 위에서 언급한 관리자 기능을 위한 api 주소입니다. 제가 추가로 작성할때에는 from . import 파일명
모듈을 불러오는 코드를 작성하고 path('url작성/', 기능파일명.함수명)
의 방식을 이용했고 메인 폴더에 있는 이 urls
파일 말고도 각 기능폴더에도 들어가 있기때문에 이를 불러오고자 from django.urls import include
장고의 include
함수를 이용해 path('', include('기능폴더명.urls'))
다음과 같이 작성을 했습니다.
from django.contrib import admin
from django.urls import path, include
from . import views
urlpatterns = [
path('admin/', admin.site.urls),
path('test/', views.base_response, name='first_test'),
path('first/', views.first_view, name='first_view'),
path('', include('user.urls')),
path('', include('erp.urls'))
기능폴더를 만들기 위해 django-admin startproject 기능폴더명
라는 명령어를 입력하면 장고가 해당 이름을 가진 폴더를 생성해줍니다. 해당 폴더에는 몇개의 파일들이 이미 생성되어 있을텐데 그 중 models
파일은 class
를 관리하는 파일입니다. from django.db import models
이렇게 모듈을 불러오고 class Product(models.Model):
이와 같이 models.Model
을 상속받게하면 클래스 내에 선언하는 변수들의 성격을 정해줄 수 있습니다. 텍스트만 받을지 정수만 받을지 부터 외래키거나 날짜 등이 있습니다.
이후 클래스 안에 Meta
클래스를 생성해 db_table
변수에 테이블명
을 입력해 db 테이블을 생성할 수 도 있습니다.
from django.db import models
class Product(models.Model):
code = models.CharField(max_length = 32, verbose_name="상품코드")
name = models.CharField(max_length = 32, verbose_name="상품명")
description = models.TextField(verbose_name="상품설명")
price = models.IntegerField(verbose_name="상품가격")
stock = models.IntegerField(verbose_name="재고", default=0)
sizes = (
('S', 'Small'),
('M', 'Medium'),
('L', 'Large'),
('XL', 'X-Large'),
('F', 'Free'),
)
size = models.CharField(choices=sizes, max_length=2, verbose_name="사이즈")
def __str__(self):
return self.code
class Meta:
db_table = "falseshinsa_product"
가장 많이 보게되는 views.py입니다. 이 파일은 기본으로 생성되어 있지는 않고 따로 생성해주셔야 합니다. 해당 파일은 기능하는 함수들을 관리하게되는 파일입니다.
def home(request):
user = request.user.is_authenticated
if user:
return redirect('/product')
else:
return redirect('/sign-in')
이번 한 주는 모름에 연속이였던 것 같습니다. 뭔가 작성은 하고있는데 이게 맞나? 라고 생각하며 작성해 나가고는 있음에도 불신이 계속들었고, 끊임없이 오류들과 만났습니다. 본 캠프 들어와서 했던 개인과제 중 가장 힘들었던 것 같은데 개인적으로는 조금이라도 장고에 대해 이해할 수 있던 것 같아서 다행이라고 느꼈습니다.