설표의 장고




장고프로젝트 생성방법 + 장고 기초 설정방법





( 수정됨)


환경

OS : Windows 10
python : 3.10.11
Django : 5.0.7

주요 파일 경로

C:/
|- django/
    |- mysite/
        |- manage.py
        |- config/
        |   |- settings/
        |       |- __init__.py
        |       |- local.py
        |       |- settings.py
        |       |- secret.txt
        |- static/
        |- media/
        |- templates/

가상환경 실행하기

cmd.exe를 실행해 이전에 생성한 가상환경 폴더로 이동한 다음, 가상환경을 실행합니다.
가상환경 폴더 경로와 가상환경 실행방법은 이전 글을 확인해주세요.

장고 프로젝트 생성방법

장고 프로젝트를 생성하려면 우선 장고 패키지를 설치해야 합니다.
"pip install django" 명령어로 설치할 수 있습니다.

장고 패키지가 설치되었다면 "django-admin startproject config C:/django/mysite" 명령을 입력해 프로젝트를 생성할 수 있습니다.
mysite라는 폴더가 존재하지 않는다면 설치가 불가능하니, "mkdir C:/django/mysite" 명령으로 폴더를 먼저 생성해줘야 합니다.

전체 과정은 다음과 같습니다.

전체 과정
(django) C:\django>pip install django
Collecting django
  Downloading Django-5.0.7-py3-none-any.whl.metadata (4.1 kB)
Collecting asgiref<4,>=3.7.0 (from django)
  Using cached asgiref-3.8.1-py3-none-any.whl.metadata (9.3 kB)
Collecting sqlparse>=0.3.1 (from django)
  Downloading sqlparse-0.5.1-py3-none-any.whl.metadata (3.9 kB)
Collecting tzdata (from django)
  Using cached tzdata-2024.1-py2.py3-none-any.whl.metadata (1.4 kB)
Collecting typing-extensions>=4 (from asgiref<4,>=3.7.0->django)
  Using cached typing_extensions-4.12.2-py3-none-any.whl.metadata (3.0 kB)
Downloading Django-5.0.7-py3-none-any.whl (8.2 MB)
   ---------------------------------------- 8.2/8.2 MB 7.0 MB/s eta 0:00:00
Using cached asgiref-3.8.1-py3-none-any.whl (23 kB)
Downloading sqlparse-0.5.1-py3-none-any.whl (44 kB)
   ---------------------------------------- 44.2/44.2 kB 2.3 MB/s eta 0:00:00
Using cached tzdata-2024.1-py2.py3-none-any.whl (345 kB)
Using cached typing_extensions-4.12.2-py3-none-any.whl (37 kB)
Installing collected packages: tzdata, typing-extensions, sqlparse, asgiref, django
Successfully installed asgiref-3.8.1 django-5.0.7 sqlparse-0.5.1 typing-extensions-4.12.2 tzdata-2024.1

(django) C:\django>django-admin startproject config C:/django/mysite
CommandError: Destination directory 'C:\django\mysite' does not exist, please create it first.

(django) C:\django\mysite>python -m django --version
5.0.7

(django) C:\django>mkdir C:/django/mysite

(django) C:\django>django-admin startproject config C:/django/mysite

(django) C:\django>cd C:/django/mysite

(django) C:\django\mysite>dir
 C 드라이브의 볼륨에는 이름이 없습니다.
 볼륨 일련 번호: 7832-5179

 C:\django\mysite 디렉터리

2024-07-24  오전 10:22    <DIR>          .
2024-07-24  오전 10:22    <DIR>          ..
2024-07-24  오전 10:22    <DIR>          config
2024-07-24  오전 10:22               684 manage.py
               1개 파일                 684 바이트
               3개 디렉터리  16,736,296,960 바이트 남음

(django) C:\django\mysite>

폴더 생성하기

장고 프로젝트에서 사용할 폴더를 만들어줍니다.
만들 폴더는 "static", "media", "templates" 3개로, 각각 사이트에서 사용할 css나 js파일을 보관할 폴더, 이미지나 동영상 보관할 폴더, html 템플릿을 보관할 폴더입니다.

(django) C:\django\mysite>mkdir static
(django) C:\django\mysite>mkdir media
(django) C:\django\mysite>mkdir templates
(django) C:\django\mysite>

장고프로젝트 기초 설정하기

config 폴더를 확인해보면 "settings.py"라는 이름의 설정파일이 존재합니다.
config 폴더 안에 "settings"라는 폴더를 생성한 다음, 그 안에 "settings.py"를 이동시킵니다.

secret key 분리하기

메모장을 통해 "settings.py"의 내용을 확인할 수 있습니다.

그리고 "settings" 폴더에 "secret.txt"라는 이름의 텍스트 파일을 만들어 다음과 같이 저장해줍니다.
저장하는 텍스트는 "settings.py"의 "SECRET_KEY" 값입니다.
"settings.py"를 메모장으로 열어보면 "SECRET_KEY" 값을 확인할 수 있습니다.
"SECRET_KEY"는 "django-insecure..."으로 시작합니다.

# config/settings/secret.txt

"django-insecure-1111..."

장고프로젝트 기초 설정 변경하기

"settings.py" 메모장으로 불러낸 다음, 다음 내용을 덮어씌웁니다.

# config/settings/settings.py
# code by 하얀설표(https://django.seolpyo.com/)

import json
from pathlib import Path

BASE_DIR = Path(__file__).resolve().parent.parent.parent

with open(BASE_DIR / 'config/settings/secret.txt') as txt: SECRET_KEY = json.load(txt)

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',
]

ROOT_URLCONF = 'config.urls'

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [BASE_DIR / 'templates'],
        '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 = 'config.wsgi.application'

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite',
    }
}

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 = 'ko-KR'
TIME_ZONE = 'Asia/Seoul'
USE_I18N = True
USE_TZ = True

STATICFILES_DIRS = [BASE_DIR / 'static']
STATIC_URL = 'static/'

MEDIA_ROOT = BASE_DIR / 'media'
MEDIA_URL = 'media/'

DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'

마찬가지로 메모장을 이용해 "__init__.py"와 "local.py", "prod.py"를 다음과 같이 작성한 다음, "settings" 폴더에 저장합니다.

# config/settings/local.py

from .settings import *

# config/settings/__init__.py

from .local import *

# config/prod.py

from .local import *

DEBUG = False
STATICFILES_DIRS = []
STATIC_ROOT = BASE_DIR / 'static'


이 글의 댓글 기능은 일부러 막아놓았습니다. 궁금한 내용이 있다면 게시판을 이용해주세요!


공감 : 0