💡수업 목표💡
- Django의 구조를 알아보고, 필요한 기초 명령들을 익혀본다.
- 데이터 베이스를 연결하고, 데이터베이스를 사용하는 방법을 알아본다.
- 사용자 모델을 만들고, 회원가입과 로그인 기능을 직접 만든다.
Django 프로젝트 구조
project_name/ # 장고프로젝트 설정 패키지
├── db.sqlite3
├── manage.py
└── config
├── __init__.py
├── settings.py
├── urls.py
└── wsgi.py
── requirements.txt # 설치할 pip 패키지 목록 파일
- venv/ : 프로젝트의 패키지들을 관리하는 가상환경
- manage.py : 장고 서버 관리를 도와주는 역할을 하는 스크립트. 다른 설치없이 웹 서버를 시작할 수 있다.
- config/ : 디렉토리 내부에 프로젝트를 위한 실제 python 패키지들이 저장된다. 프로젝트 내부 어디에서나 접근(import)할 수 있다.
- config/__init__.py : 해당 디렉토리가 패키지의 일부임을 알려주는 역할을 한다. python version 3.3 부터는 __init__.py 가 없어도 패키지로 인식이되지만, 하위 버전과 호환을 위해 생성하는 것이 안전하다.
- config/settings.py : 현재 Django 프로젝트의 환경/구성을 저장한다.(추후에 관련 정보 update)
- config/urls.py : 현재 Django 프로젝트의 URL선언을 저장한다. urlresolver가 사용하는 패턴 목록을 포함한다.
- config/wsgi.py : 현재 프로젝트를 서비스하기 위한 WSGI(Web Server Gateway Interface, 웹서버와 파이썬 웹 애플리케이션 개발환경 간의 인터페이스에 대한 규칙) config 설정파일이다.
settings.py
settings.py 파일은 장고 프레임워크의 프로젝트 환경을 설정하는 파일이다.
- INSTALLED_APPS - 장고에 설치 된 앱들
- MIDDLEWARE - 사용자 요청/응답 사이에서 작동하는 시스템들
- TEMPLATES - 나의 html파일을 자동으로 인식
- DATABASES - 내가 사용할 데이터베이스 연동 설정
- AUTH_PASSWORD_VALIDATORS - 패스워드 보안 수준 검증
- LANGUAGE_CODE - 화면에 어떤 언어를 보여줄것인지
- TIME_ZONE - 우리가 어떤 시간에 있는지
개발모드 설정(DEBUG)
기본적으로 개발 모드는 DEBUG=True로 설정되어 있다. 운영모드일 경우 False로 설정해야한다. Flase할 경우 서버에서 디버깅 메세지를 띄워주지 않는다.
# SECURITY WARNING: don't run with debug turned on in production
DEBUG = True
APP 추가
APP을 생성했으면 장고가 경로를 찾을 수 있게 INSTALLED_APPS에 추가한 APP 경로를 등록해줘야한다.
# Application definition
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'blog.apps.BlogConfig',
# app 생성후 추가
]
Templates 설정
장고에서 데이터를 사용자에게 보여주는 컴포넌트인 template의 경로나 정보를 설정할 수 있다.
앱마다 templates를 생성하지 않고 공용 templates라는 폴더에서 공통적으로 들어가는 html코드를 관리하기 위해서 'DIRS'에 기본 BASE_DIR를 templates경로로 설정할 수 있다.
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(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',
],
},
},
]
DATABASES 설정
장고는 기본적으로 sqlite를 사용한다. 이러한 DB정보를 설정한다.
# Database
# <https://docs.djangoproject.com/en/4.1/ref/settings/#databases>
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db.sqlite3',
}
}
언어 및 지역 시간 설정
기본 설정은 LANGUAGE_CODE = "en-us", TIME_ZONE = 'UTC' 로 되어 있지만, 한글 표기를 위해 아래와 같이 수정한다.
# Internationalization
# <https://docs.djangoproject.com/en/4.1/topics/i18n/>
LANGUAGE_CODE = 'ko-kr'
TIME_ZONE = 'Asia/Seoul'
USE_I18N = True
USE_TZ = True
STATIC / MEDIA 경로 설정
Django 프로젝트의 정적 파일들(css, js, img 등)을 관리하기 위한 경로, 그리고 파일 / 사진 첨부 등 media 파일을 저장하는 경로를 추가해 준다.
# Static files (CSS, JavaScript, Images)
# <https://docs.djangoproject.com/en/4.1/howto/static-files/>
STATIC_URL = 'static/'
앱(App)
App은 장고에서 사용하는 파이썬 패키지이다. App은 자신의 모델(Model), 뷰(View), 템플릿(Template), URL 등을 독자적으로 가지고 Django프로젝트에서 특정한 기능을 수행한다.
일반적으로 하나의 Django 프로젝트는 다수의 app으로 구성되어 있고, 여러개의 Django App을 모듈화하여 구성한다.
$ django-admin startapp [앱 이름]
$ python manage.py startapp [앱 이름]
앱 생성후에는 settings.py를 통해서 꼭 생성한 앱을 프로젝트에 추가해줘야한다.
config/settings.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
# 생성한 app
**'blog',**
]
urls.py
장고의 urls.py는 페이지 요청이 발생하면 가장 먼저 호출되는 파일로 URL과 뷰 함수 간의 매핑을 정의한다.
url 매핑시 뒤에 슬래시(/)를 하나를 붙여줘야하는데 URL을 정규화하는 장고의 기능 때문이다.
config/urls.py
from django.contrib import admin
from django.urls import path,**include**
urlpatterns = [
path('admin/', admin.site.urls),
**# path('[앱 공용 url path]',include('[앱 이름].urls'))
# project urls.py에서 모든 url을 관리할 수 있지만 앱에서 자신의 url를 관리하게 함으로써 유지보수와 가독성을 높임.
path('',include('blog.urls'))**
]
blog/urls.py
from django.urls import path
**from . import views**
urlpatterns = [
**# path('[요청할 URL]', views.[views.py에서 연결할 메소드], name=[URL 이름]),
path('first/', views.first_view, name="first_view")**
]
url 생성 규칙
config/urls.py | app1/urls.py | 최종 URL | ||
'pybo/' | + | '' | = | 'pybo/' |
'pybo/’ | + | 'question/create/’ | = | 'pybo/question/create/’ |
views.py
장고의 views.py는 데이터를 처리하는 로직인 view 메소드를 정의하는 파일이다. 들어오는 url이 urls.py를 통해서 매핑되면 view.py에서 필요한 정보를 처리후 템플릿으로 전달하는 역할을 한다.
from django.http import HttpResponse
def base_response(request):
return HttpResponse("안녕하세요! 장고의 시작입니다!")
render()함수는 django.shortcuts 패키지에 포함되어 있는 도우미 함수로 동적으로 template이용하여 html을 생성한 후 httpResponse에 포함해 반환해준다.
from django.http import HttpResponse
**from django.shortcuts import render**
def first_view(request):
**# render(request, '[템플릿명]')**
return render(request, 'my_test.html')
'스파르타코딩클럽 > Python' 카테고리의 다른 글
파이썬 Django 기초 - 2주차 (2) 데이터베이스와 Model (0) | 2022.09.28 |
---|---|
파이썬 Django 기초 - 1주차 (1) | 2022.09.26 |
Python에서 venv로 가상 환경 사용하기 (2) | 2022.09.26 |
Python 설치 및 IDE 설정 (1) | 2022.09.26 |
Python 기초문법 뽀개기 (0) | 2022.09.03 |