BootCamp/모두의연구소:오름캠프

Django 실습 1 : 프로젝트 시작

혼복필 2024. 3. 27. 16:58
728x90
300x250
SMALL

1. 가상환경 생성

$ mkdir myapp
$ cd myapp

myapp 이라는 폴더를 생성 (mkdir)하고 폴더 안으로 이동 (cd)

 

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

가상환경을 통해 독립된 개발 환경을 세팅

 

$ python -m venv venv

venv라는 가상환경 이름을 설정

 

2. 가상환경 실행 및 패키지 설치

가상환경 활성화

$ source venv/bin/activate

 

+ source 명령어가 실행되지 않을 경우

macOS

= $ source venv/bin/activate 

PowerShell

= $ venv/Scripts/Activate.ps1

CMD

= $ call venv/Scripts/activate.bat

Git Bash

= $ source venv/Scripts/activate

 

myapp/
    venv/

폴더 트리에 venv 추가된 모습을 확인

 

가상환경 비활성화

$ (venv) deactivate

가상환경을 나가게 되면 라인 앞의 (venv)가 사라짐

 

가상환경 내 패키지 설치

$ (venv) python -m pip install django

Django 설치 명령어

 

3. Django 프로젝트 생성

프로젝트 생성

$ (venv) django-admin startproject [프로젝트이름] .

$ (venv) django-admin startproject app .

마지막에 . 을 붙여줘야 앞에 생성한 폴더에 프로젝트가 생성됨

 

폴더구조 확인

myapp/
    app/
        __init__.py
        asgi.py
        settings.py
        urls.py
        wsgi.py
    manage.py
    venv/

기본적인 Django 애플리케이션이 생성

최상단에 위치한 myapp라는 폴더는 프로젝트를 담는 공간

현재 생성한 폴더는 하위에 존재하는 app 라는 폴더

폴더에는 init.py, asgi.py, settings.py, urls.py, wsgi.py 등의 파일이 존재

생성된 myapp 폴더와 동일한 선상에는 manage.py 파일이 존재

이 파일은 프로젝트를 관리하는 커맨드라인 인터페이스

 

프로젝트 실행

$ (venv) python manage.py migrate

기본적으로 설치되는 admin, auth, contenttypes, sessions와 관련된 내용을 먼저 적용하기 위함

$ (venv) python manage.py runserver

프로젝트 생성 확인은 manage.py가 있는 폴더 (프로젝트 root 폴더)에서 서버 실행, localhost:8000가 자동 실행

$ (venv) python manage.py runserver 8080
$ (venv) python manage.py runserver 0.0.0.0:8080

애플리케이션을 다른 포트에서 실행하고 싶을 때는 runserver 커맨드 뒤에 포트 번호 인수를 추가

 

 

프로젝트 내 앱 생성

$ (venv) python manage.py startapp blog

채팅 기능을 만들기 위해 blog 앱 생성

메인 프로젝트 (myapp) 안에 blog 기능을 담당하는 애플리케이션을 새로 만들어주는 것

 

myapp/
    blog/
        migrations/
        __init__.py
        admin.py
        apps.py
        models.py
        tests.py
        views.py
    app/
    manage.py
db.sqlite3
    venv/

처음 생성한 app 폴더와 동일한 위치에 blog 앱(폴더)이 추가 됨

 

4. settings.py 수정

settings.py (1)

import os
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
SECRET_KEY = 'Your secret key'
DEBUG = True
ALLOWED_HOSTS = []
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]
MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
...

 

SECRET_KEY

SECRET_KEY = 'YOUR_SECRET_KEY'

프로젝트를 생성할 시 SECRET_KEY 자동 생성

 

ALLOWED_HOST

ALLOWED_HOSTS = []

 

settings.py의 DEBUG=True 일 때 자동으로 localhost, 127.0.0.1, [::1]이 적용되어 로컬에서 문제없이 접속할 수 있음

DEBUG=False 일 때는 ALLOWED_HOSTS 부분이 비어있으면 애플리케이션에 접속할 수 없음

(CommandError: You must set settings.ALLOWED_HOSTS if DEBUG if False.)

 

ALLOWED_HOSTS=['localhost']로 설정한다면 애플리케이션 접속 시 localhost:8000로 접속해야 함

같은 의미로 127.0.0.1:8000로 접속할 경우 접속이 거절 됨

ALLOWED_HOSTS=['127.0.0.1']로 설정한다면 127.0.0.1:8000로만 접속할 수 있음

= 모든 IP로부터 접속을 허용하고 싶다면 ALLOWED_HOSTS=['*']와 같이 입력

 

Django 프로젝트는 실제 서버 배포 시 DEBUG=False로 값을 세팅

이때 모든 IP의 접속을 허용하기보다는 Apache나 NGINX의 서버 IP만 적어두는 것을 추천

 

INSTALLED_APPS

# Application definition
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'blog' # 새로 만든 앱 추가
]

 

INSTALLED_APPS 부분에도 프로젝트 생성과 동시에 설치되는 기본적인 앱들이 존재함

django.contrib.admin : 관리자 페이지를 생성하는 앱
django.contrib.auth : 기본 인증 시스템 앱
django.contrib.contenttype : 컨텐츠 타입을 관리하는 앱
django.contrib.sessions : 세션을 다루는 앱
django.contrib.messages : 메세지를 다루는 앱
django.contrib.staticfiles : 정적 파일을 관리하는 앱

 

Django에서 미리 만들어 배포하는 앱으로 웹 애플리케이션을 개발할 때 필수적인 기능들

Django에서 만들어둔 앱들처럼 만드는 앱도 메인 프로젝트와 연결하려면 INSTALLED_APPS 부분에 추가해야 함

chat 앱이 설치되었음을 프로젝트에 알리기 위해 settings.py 파일 INSTALLED_APPS 부분에 'blog'을 추가

 

settings.py (2)

...
ROOT_URLCONF = 'app.urls'
TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [],
        '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',
            ],
        },
    },
]
WSGI_APPLICATION = 'app.wsgi.application'
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}
AUTH_PASSWORD_VALIDATORS = [
    {
        'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
    },
]
LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'UTC'
USE_I18N = True
USE_L10N = True
USE_TZ = True
STATIC_URL = '/static/'

 

ROOT_URLCONF, WSGI_APPLICATION

ROOT_URLCONF = 'app.urls'
WSGI_APPLICATION = 'app.wsgi.application'

ROOT_URLCONF와 WSGI_APPLICATION은 자동으로 메인 프로젝트 기준으로 작성됨

 

LANGUAGE_CODE

# LANGUAGE_CODE = 'en-us'
LANGUAGE_CODE = 'ko-kr'

언어 코드의 경우 한국어 기준으로 변경

 

TIME_ZONE

# TIME_ZONE = 'UTC'
TIME_ZONE = 'Asia/Seoul'

타임존의 경우 한국 기준으로 변경

728x90
300x250
LIST

'BootCamp > 모두의연구소:오름캠프' 카테고리의 다른 글

오름캠프 마지막 회고  (6) 2024.04.18
Django settings.py  (1) 2024.03.26
Django Basic  (2) 2024.03.24
24.02.19  (4) 2024.03.05
미니 프로젝트  (1) 2024.02.21