[WIL #4] Django를 배우며

안떽왕·2023년 4월 9일
0

Weekly I Learned

목록 보기
4/16

장고

프레임워크를 이용한 작업을 제대로 하게된것은 이번이 처음이였는데 확실히 어려웠습니다. 처음에는 정상적으로 기능하는 사이트 하나 띄우는데 거의 반나절씩 걸렸으나 계속 진행하다 보니 완벽하진 않더라도 어느정도 장고라는 프레임워크의 구조와 작동방식이 눈에 들어오게 되었던 것 같습니다.

장고는 다른 프레임워크와는 다르게 많은 기능을 기본으로 제공하고 있습니다. 그 중 가장 대표적인게 관리자 기능이 있고, 그 외에 import를 통해 가져올 수 있는 함수도 굉장히 많습니다.

settings.py

처음 프로젝트를 생성하면 폴더안에 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

urls.py는 프로젝트의 urlapi를 관리합니다. 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'))

models.py

기능폴더를 만들기 위해 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

가장 많이 보게되는 views.py입니다. 이 파일은 기본으로 생성되어 있지는 않고 따로 생성해주셔야 합니다. 해당 파일은 기능하는 함수들을 관리하게되는 파일입니다.

def home(request):
    user = request.user.is_authenticated
    if user:
        return redirect('/product')
    else:
        return redirect('/sign-in')

느낀 점

이번 한 주는 모름에 연속이였던 것 같습니다. 뭔가 작성은 하고있는데 이게 맞나? 라고 생각하며 작성해 나가고는 있음에도 불신이 계속들었고, 끊임없이 오류들과 만났습니다. 본 캠프 들어와서 했던 개인과제 중 가장 힘들었던 것 같은데 개인적으로는 조금이라도 장고에 대해 이해할 수 있던 것 같아서 다행이라고 느꼈습니다.

profile
이제 막 개발 배우는 코린이

0개의 댓글