Django__001
Django
Django는 더 생산적인 개발자로 만들어줄것이다.
Django는 사용자 인증, 컨텐츠 관리, 사이트 맵, RSS 피드 등 많은 것들을 처리한다. 보안도 처리하고 sql 삽입, 사이트 간 스크립팅, 요청 위조, 클릭 재킹 같은 많은 일반적 오류에 대한 보안요소를 즐길수 있다.
Poetry
공부하면서 느낀바로는 npm과 같은 느낌이었다.
poetry를 사용하기 위해서 가상환경을 만들어주어야하는데 이를 위해 해당 폴더 경로에 터미널에서 poetry init을 해준다.
init을 해주면 toml 파일이 생성되는데 이제여기다 원하는 패키지를
poetry add <packageName>을 해주면된다. Django를 사용하기 위해서 django를 입력한다.
가상환경을 진입하기위해서 해당 폴더경로에서 터미널에 poetry shell를 입력해준다. 가상환경으로 들어와야지만 내가 사용하고 싶은 패키지의 명령어를 사용할수 있다.
가상환경에서 나가고 싶으면 터미널에서 exit을 입력하면 끝
Django Start Project
django를 사용하기 위해 다음과같은 명령어를 입력한다.
# 터미널
django-admin startproject <project name> <path>
djago의 서버를 사용하기 위해서 poetry shell안에서 아래 입력하면 서버가 생성된 것을 터미널에서 알려준다.
python manage.py runserver
서버가 시작되면 터미널에 붉은색 글씨가 있는데 승인되지않은 마이그레이션이 18개가 있다고 나온다 이것을 마이그레이션하는 코드가 나온다. 앞으로도 데이터베이스의 모습이 바뀔때 많이 사용될테니 주의하자.
python manage.py migrate
CreateSuperUser
127.0.0.8000/admin
Django에는 admin pannel이 있는데 이 admin의 id/pw를 만들기 위해서 터미널에 다음과 같이 입력한다. 당연히 가상환경 안에서 입력해야한다.
python manage.py createsuperuser
First App
poetry shell에서 다음과 같이 입력한다.
python manage.py startapp <application name>
어플리케이션 이름으로 입력된 폴더가 생성된다.
폴더안에는 여러 파이썬 파일이 생성되는데
models.py에는 데이터의 모양을 django에게 알려주는 곳이다.
# models.py 예시
from typing import Any
from django.db import models
# Create your models here.
class 클래스이름(models.Model):
""" 관례로는 여기에 어떤것을 그렸는지 작성하면 좋음 """
# CharField와 TextField의 차이는 CharField는 긴텍스트가 아닌 길지만 길이의 제한이 있는 텍스트이고
# TextField는 긴텍스트를 이야기한다.
name = models.CharField(max_length=140)
price = models.PositiveIntegerField()
descrition = models.TextField()
address = models.CharField(max_length=200)
이렇게 작성후 Django에게 작성한 어플리케이션에 대해 알려줘야하는데 이때 settings.py의 INSTALLED_APPS에 생성한 어플리케이션 폴더안에 있는 apps.py의 class이름을 모두 작성해주면된다.
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'생성한폴더.apps.apps안의 클래스명'
]
이렇게 하면 모델을 저장할때마다 Django가 이를 감지하고 서버를 다시 시작한다.
Admin panel에서 보기 위하여 생성한 어플리케이션 폴더에 admin.py에 들어간다.
from django.contrib import admin
from .models import 해당 파일에서 불러올 클래스명을 입력
# Register your models here.
@admin.register(해당 파일에서 불러올 클래스명을 입력)
class 클래스명 (admin.ModelAdmin):
# admin.ModelAdmin을 상속받는다.
pass
이렇게 해서 admin panel를 보면 해당 모델이 추가가 되는 모습을 볼수있는데 클릭하게되면 404가 나온다. 이는 아직 데이터베이스에 반영이 된것이 아니라서 이렇게 나오는데 이를 위해서는 migration파일을 만들고 migrate를 해주면 된다. 이또한 가상환경에서 실행해야하며 다음과 같이 입력하면된다. 이렇게 하고 다시 admin panel에가 가게되면 정상적으로 페이지가 나오며 데이터 또한 수동으로 입력할 수 있다. models에 추가적인게 필요하면 추가를 하고 다음과 같이 다시 입력하면 데이터베이스에 반영이 된다.
# migration할 파일 생성
python manage.py makemigrations
# 데이터베이스에 migrate
python manage.py migrate
Admin Pannel
기본적으로 설정이된 User모델에 보면 그에 대한 정보가 보기 쉽게 나타날수 있다. 우리가 만든 모델도 동일한 방식으로 볼 수 가 있는데 이때 생성한 어플리케이션 폴더의 admin.py에서 설정해주면 된다.
from django.contrib import admin
from .models import 해당 파일에서 불러올 클래스명을 입력
# Register your models here.
@admin.register(해당 파일에서 불러올 클래스명을 입력)
class 클래스명 (admin.ModelAdmin):
# pass를 삭제하고 필요한 것들을 입력해준다.
list_display = (
"name", "price", "address", "pet_allowed"
)
list_filter = (
'pet_allowed',
)
search_fields = ('address',)
https://docs.djangoproject.com/ko/5.0/ref/contrib/admin/
Django 관리자 사이트 | Django 문서
The web framework for perfectionists with deadlines.
docs.djangoproject.com