[패스트캠퍼스python] 프로젝트와 앱의 차이, 템플릿생성, 프로젝트에 앱등록하기,Class생성, class Meta

파이썬 인강 자기계발 챌린지 28회차 미션

1. 새로운 프로젝트 생성하기 : django-admin startproject 새로운프로젝트명

장고 설치가 완료되면 django-admin 명령어를 사용할 수 있다.
django-admin startproject fc_community를 통해 fcdjango_venv 아래에 fc_community 프로젝트가 만들어지고 안에 기본적인 내용들이 자동생성된다. 짜라란~

2. app생성하기 : django-admin startapp 새로운앱명

django-admin startapp board명령어를 통해 fcdjango_venv 아래에 board라는 새로운 앱이 생성되어지고 models과 view게층이 자동적으로 생성된다.

3. project와 app의 차이점

그렇다면 startproject명렁어와 startapp명령어의 차이점이 무엇일까?

위의 두가지 명령어로 자동생성된 파일들을 보자.

startproject와 startapp 차이

1번 빨간색은 startproject명렁어를 통해 자동생성된 파일들이다.
2번 파란색은 startapp명령어를 통해 자동생성된 파일들이다.

  • 프로젝트는 앱 한개 이상을 담을 수 있고 관련된 configuration도 함께 담아 하나의 웹사이트를 구성한다.

  • 은 뷰계층과 모델게층을 묶어서 제공하며 하나의 웹앱기능만 담당한다. 또한 app은 프로젝트 A, B, C, D등등 동시에 여러 프로젝트에 포함될 수 있다.

4. templates생성

MTV모델링을 하기 위해서는 템플릿폴더를 생성해줘야한다.
템플릿은 어디에나 만들어도되지만 보통 앱안에 만든다.
앱폴더명을 우클릭한 뒤 새로운 폴더를 누른 뒤 폴더이름은 templates라고 생성한다.
장고에서 사용하는 템플릿엔진이 사용될때 이 폴더가 기본적으로 작동한다.
그러니 app을 만든 뒤 항상 templates폴더도 생성할 것!
세트로 기억하자 세트!

5. 만든 app을 프로젝트에 등록하기

만든 앱들이 자동적으로 프로젝트에 등록되면 정말 좋겠지만 그렇지않다.
따라서 프로젝트에 만든 앱을 등록시켜 연결이 되게끔 만들어줘야한다.

startproject명령어로 프로젝트를 생성하면 프로젝트폴더안에 동일한 이름의 폴더가 하나 더 생성된다.
여기서 만든 앱들을 등록시킬 수 있다.
프로젝트명과 동일한 파일명을 클릭하면 여러 파일 중에 settings.py가 있다.
클릭후 Application definition를 찾아보면 이미 installed된 앱 목록이 나온다.
장고에서 기본적으로 제공해주는 앱으로 아래 코드에서 django.contrib로 시작하는 6개가 바로 그 앱들이다.
이 코드 아래에 새로 만든 app을 추가해줘야한다.
꼭 등록을 해줘야 모델이라든지 뷰등을 사용할 수 있게 된다.
절대 까먹지말자!

나는 board와 fcuser앱 두개를 만들었으므로 두개를 아래 코드처럼 추가해줬다.

1
2
3
4
5
6
7
8
9
10
11
12
# Application definition

INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'board',
'fcuser'
]

6. Class생성

user를 관리할 수 있는 앱을 만들어보자.

1
2
3
4
class Fcuser(models.Model):
username = models.CharField(max_length=64, verbose_name="사용자명")
password = models.CharField(max_length=64, verbose_name="비밀번호")
registered_dttm = models.DateTimeField(auto_now_add=True, verbose_name="등록시간")
  • CharField는 문자열을 담을 수 있는 필드이다.

  • registered_dttm에서 dttm은 실무에서 자주 사용되는 약어로 dateTime의 약자이다

  • auto_now_add=True 는 fcuser라는 객체가 저장되는 시점에 자동으로 현재시간을 데이터로 넣게된다.

장고는 클래스만 만들면 데이터를 생성하고 삭제하는데에 있어서 별도의 지정이 필요가 없다.
클래스 하나로 모델이 완성되버린 것이다! 디폴트값이 적용되어 바로 출력되기때문에 매우 편리하다.

7. class Meta

테이블명을 바꿀때는 아래 코드를 사용한다.
class Meta:라는 클래스안의 클래스를 통해서 장고프레임워크에게 내가 원하는 것을 전달할 수 있다.

테이블명을 바꾸는 이유는 이해도를 높이기 위함도 있지만 기본적으로 장고에서 제공되는 테이블명과 구분되어야하기 때문에 테이블명을 바꿔주는 것이 좋다.

1
2
3
4
5
6
7
class Fcuser(models.Model):
username = models.CharField(max_length=64, verbose_name="사용자명")
password = models.CharField(max_length=64, verbose_name="비밀번호")
registered_dttm = models.DateTimeField(auto_now_add=True, verbose_name="등록시간")

class Meta:
db_table = "자신이 원하는 테이블명"