본문 바로가기
FrontEnd

[Django] Django 이용해 Web 개발하기 2 - Django App

by 푸고배 2021. 1. 31.

 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에 아무것도 추가해주지 않았다면 에러가 발생할 것이다.

 

 

참고 자료:

 

예제로 배우는 파이썬 프로그래밍 - Django App

1. Django App이란? Django App은 Django에서 사용하는 "파이썬 패키지"이다. Django App 패키지는 그 안에 자신의 모델(model), 뷰(view), 템플릿(template), URL 매핑 등을 독자적으로 가지고 있으며, 일반적으로 하

pythonstudy.xyz

 

 

Django 소개 - Web 개발 학습하기 | MDN

Django의 첫번째 문서에서는 "Django가 뭐지?"라는 질문에 답해보고, Django 웹 프레임워크의 특별한 부분에 대해 전반적으로 살펴봅니다. 우리가 이 수업에서 자세히 다루지는 않을 고급 기능들까

developer.mozilla.org

 

 

 

 

 

 

 

 

 

 

 

반응형

댓글