Django App이란
Django App은 Django에서 사용하는 "파이썬 패키지"이다. Django App 패키지는 그 안에 자신의 모델(model), 뷰(view), 템플릿(template), URL 매핑 등을 독자적으로 가지고 있으며, 일반적으로 하나의 Django 프로젝트는 하나 이상의 Django App으로 구성되어 있다. 규모가 큰 Django 프로젝트는 보통 여러 개의 Django App들을 모듈화하여 구성하는데, 모듈화된 App들로 구성하면 개발 및 유지 보수가 효율적이기 때문이다. 또한 잘 모듈화된 App은 여러 웹 프로젝트에서 쉽게 재사용할 수도 있다.
Django Project 만들기
django-admin startproject locallibrary
cd locallibrary
django-admin 도구가 아래와 같이 폴더/파일 구조를 생성한다.
locallibrary/
manage.py
locallibrary/
__init__.py
settings.py
urls.py
wsgi.py
- __init__.py는 빈 파일입니다. 이 파일은 파이썬에게 이 디렉토리를 하나의 파이썬 패키지로 다루도록 지시합니다.
- settings.py는 웹사이트의 모든 설정을 포함하고 있습니다. 이 파일에는 우리가 만드는 모든 어플리케이션, 정적 파일의 위치, 데이터베이스 세부 설정 등을 등록합니다.
- urls.py는 사이트의 URL과 뷰의 연결을 지정해줍니다. 여기에는 모든 URL 매핑 코드가 포함될 수 있지만, 특정한 어플리케이션에 매핑의 일부를 할당해주는 것이 일반적입니다.
- wsgi.py는 당신의 장고 어플리케이션이 웹서버와 연결 및 소통하는 것을 돕습니다. 당신은 이것을 표준 형식(boilerplate)으로 다뤄도 무방합니다.
- asgi.py is a standard for Python asynchronous web apps and servers to communicate with each other and positioned as an asynchronous successor to WSGI, where WSGI provided a standard for synchronous Python apps, ASGI provides one for both asynchronous and synchronous apps, with a WSGI backward-compatibility implementation and multiple servers and application frameworks.
manage.py는 어플리케이션을 생성하고, 데이터베이스와 작업하고, 그리고 개발 웹 서버를 시작하기 위해 사용된다.
catalog application 만들기
프로젝트의 manage.py와 같은 폴더 안에서 아래의 명령어 실행을 통해 catalog 어플리케이션을 생성한다.
py -3 manage.py startapp catalog
명령어가 실행되면 catalog라는 폴더가 생기며, 폴더 내부 구조는 다음과 같다.
locallibrary/
manage.py
locallibrary/
catalog/
admin.py
apps.py
models.py
tests.py
views.py
__init__.py
migrations/
__init__.py와 migrations는 아래와 같은 역할을 수행한다.이름 그대로 뷰는 views.py에, 모델은 models.py에, 테스트는 tests.py에, 관리자 사이트 설정은 admin.py에, 어플리케이션 등록(registration)은 apps.py에 있다.
- migrations 폴더 — 모델을 수정할 때 마다 자동으로 데이터베이스를 업데이트하는 것을 가능하게 해 줄 마이그레이션 파일들을 저장할 폴더
- __init__.py — 장고/파이썬이 폴더를 파이썬 패키지로 인식하게 할 빈 파일입니다. 또한 프로젝트의 다른 부분에서 객체(object)를 사용할 수 있게 합니다
- + URL 맵핑, 템플릿, 정적 파일(static file)과 연관된 파일
catalog application 등록하기
생성한 어플리케이션을 프로젝트에 등록(register)하는 과정이 필요하다.
어플리케이션들은 프로젝트 설정 안이 INSTALLED_APPS 리스트에 추가함으로써 등록이 가능하다.
프로젝트의 설정 파일(locallibrary/locallibrary/settings.py)을 열고 INSTALLED_APPS 리스트의 정의 부분을 찾는다.
그리고 그 리스트 제일 아래에 다음과 같이 기입한다.
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'catalog.apps.CatalogConfig', # 추가하기
]
URL 매퍼 연결하기
프로젝트 폴더안의 urls.py로 모든 URL 맵핑을 관리할 수 있지만, 연관된 어플리케이션에 따라 매핑을 다르게 하는 것이 일반적이다.
"""locallibrary URL Configuration
The `urlpatterns` list routes URLs to views. For more information please see:
https://docs.djangoproject.com/en/2.0/topics/http/urls/
예제:
Function views 일 경우
1. Add an import: from my_app import views
2. Add a URL to urlpatterns: path('', views.home, name='home')
Class-based views 일 경우
1. Add an import: from other_app.views import Home
2. Add a URL to urlpatterns: path('', Home.as_view(), name='home')
다른 참조할 URL FILE 들을 포함시켜야 하는경우
1. Import the include() function: from django.urls import include, path
2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
"""
from django.contrib import admin
from django.urls import path
urlpatterns = [
path('admin/', admin.site.urls),
]
URL 맵핑은 urlpatterns 변수를 통해 관리되는데, 이 변수는 path() 함수의 파이썬 list 타입이다. 각각의 path() 함수는 패턴이 일치할 때 표시될 뷰에 URL 패턴을 연결하거나(주석 예제 1,2번), 다른 URL 패턴 테스트 코드 목록에 연결한다.(주석 예제 3번)
urlpatterns 리스트는 맨 처음에 관리자 어플리케이션의 고유한 URL 맵핑 정의를 갖고 있는 admin.site.urls 모듈에 admin/ 패턴을 가지고 있는 모든 URL을 매핑하는 단일 함수를 정의한다.
urlpatterns 리스트에 새로운 리스트 항목을 추가하기 위해서 아래 코드를 파일의 마지막에 추가해야한다. 이 새로운 항목은 요청(request)을 모듈 catalog.urls(관련 URL /catalog/urls.py가 있는 파일)에 catalog/ 패턴과 함께 전달하는 path()를 포함한다. (만일 www.xxxx.com/catalog로 시작되는 요청이 들어 오면 catalog/urls.py를 참조해서 맵핑하겠다는 의미)
urls.py
# Use include() to add paths from the catalog application
from django.conf.urls import include
from django.urls import path
urlpatterns += [
path('catalog/', include('catalog.urls')),
]
catalog/urls.py
from django.urls import path
from catalog import views
urlpatterns = [
# catalog 내부의 객체와 연결해주어야 에러 발생 X
]
127.0.0.1:8000을 127.0.0.1:8000/catalog/ 로 리다이렉트하기
urls.py에 아래와 같이 추가한다.
#Add URL maps to redirect the base URL to our application
from django.views.generic import RedirectView
urlpatterns += [
path('', RedirectView.as_view(url='/catalog/', permanent=True)),
]
정적 파일들을 제공하기 위해 아래의 urls.py의 하단에 아래의 코드도 추가한다.
# Use static() to add url mapping to serve static files during development (only)
from django.conf import settings
from django.conf.urls.static import static
urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
+) 간단하게 아래와 같은 문법으로 위의 코드를 표현하는 방법도 있다.
urlpatterns = [
path('admin/', admin.site.urls),
path('catalog/', include('catalog.urls')),
path('', RedirectView.as_view(url='/catalog/', permanent=True)),
] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
+ Website 테스트를 위한 DB 마이그레이션
py -3 manage.py makemigrations
py -3 manage.py migrate
makemigrations는 프로젝트에 설치된 모든 어플리케이션에 대한 migration을 생성한다. 하지만 적용하진 않는다.
migrate는 migration을 실제로 데이터베이스에 적용합니다(장고는 현재 데이터베이스에 어떤 것들이 추가되었는지 추적합니다).
웹사이트 실행하기
py -3 manage.py runserver
catalogs/urls.py의 urlpatterns에 아무것도 추가해주지 않았다면 에러가 발생할 것이다.
참고 자료:
'FrontEnd' 카테고리의 다른 글
HTTP(Hyper Text Transfer Protocol)이란? (0) | 2021.09.19 |
---|---|
SSR(Server Side Rendering) vs CSR(client Side Rendering) (0) | 2021.09.18 |
[Django] Django 이용해 Web 개발하기1 (0) | 2021.01.30 |
[QGIS] shp 파일의 좌표계 변환하기 (1) | 2020.10.16 |
[ubuntu] JAVA 설치하기 (0) | 2020.03.06 |
댓글