본문 바로가기
프로그래밍/장고

간단한 django application 만들기

by laoching 2022. 7. 1.
728x90
반응형

locallibrary라는 application을 만들어보자.

locallibrary라는 디렉토리에서 django-admin 명령어를 이용해 locallibrary라는 프로젝트를 생성한다.

django-admin startproject locallibrary

그럼 사진처럼 locallibrary라는 디렉토리가 생기고 그 안을 보면 아래와 같은 파일들이 있음을 알 수 있다.

__init__.py - 빈 파일. 파이썬에게 이 디렉토리를 하나의 파이썬 패키지로 다루도록 지시한다.
settings.py - 웹사이트의 모든 설정을 포함하고 있음. 이 파일에는 내가 만들 모든 애플리케이션, 정적 파일 위치, db 세부 설정 등을 등록한다.
urls.py     - 사이트의 URL과 뷰의 연결을 지정한다. 여기에는 모든 URL 매핑 코드가 포함될 수 있지만, 특정한 애플리케이션에 매핑의 일부를 할당해주는 것이 일반적이다.
wsgi.py     - 장고 애플리케이션이 웹서버와 연결 및 소통하는 것을 돕는다.
asgi.py     - 파이썬 비동기 웹 앱 및 서버가 서로 통신하기 위한 표준. WSGI의 상위 호환 버전으로 파이썬의 표준 API임
manage.py   - 애플리케이션을 생성하고 db와 작업하고 웹 서버를 시작하기 위해 사용함
왜 wsgi나 asgi를 사용할까?

=> 웹 서버의 종류에 상관없이 파이썬 코드의 프레임워크가 통신할 수 있도록 도와준다.

[ Django, Python ] ASGI와 WSGI 분석(Analysis of ASGI and WSGI) (nitro04.blogspot.com)

 

[ Django, Python ] ASGI와 WSGI 분석(Analysis of ASGI and WSGI)

 

nitro04.blogspot.com

상당히 좋은 블로그 같다.


애플리케이션 생성

그 다음 locallibrary 프로젝트 안에 생성될 catalog 애플리케이션을 만들기 위해 아래와 같은 명령어를 사용한다.

py -3 manage.py startapp catalog

catalog라는 디렉토리가 생성되었음

그리고 catalog 디렉토리 안에는 아래와 같은 파일들이 있다.

* migrations 폴더 : 모델을 수정할 때 마다 자동으로 db를 업데이트하는 것을 가능하게 해줄 마이그레이션 파일들을 저장할 폴더

* __init.py__ : 장고/파이썬이 폴더를 파이썬 패키지로 인식하게 하는 빈 파일임. 또 프로젝트의 다른 부분에서 객체를 사용할 수 있게 함.


애플리케이션 등록

모델을 db에 추가할 때 처럼 애플리케이션을 프로젝트에 포함시키기 위해 등록해줘야 한다.

locallibrary/locallibrary/setting.py의 INSTALLED_APPS 리스트에 추가하여 등록할 수 있다.

아래와 같이 'catalog.apps.CatalogConfig',를 적어주자.

이것은 애플리케이션 구성 객체(application configuration object)를 지정하게 된다. 애플리케이션을 생성할 때 /locallibrary/catalog/apps.py 안에 생성된다.

그리고 밑에 MIDDLEWARE라는 항목들을 보면 security, session, auth 처럼 많은 기능이 있는 것을 볼 수 있다.


기타 설정

시간설정을 해주자. Asia/Seoul로 바꿔줬다.


URL 맵퍼 연결

웹사이트는 프로젝트 폴더 안의 URL 맵퍼 파일(urls.py)과 생성된다. urls.py를 통해 모든 URL 맵핑을 관리할 수 있지만, 연관된 애플리케이션에 따라 매핑을 다르게 하는게 일반적이다.

locallibrary/locallibrary/urls.py를 열어보자. 친절하게 설명이 적혀있다.

URL 맵핑은 urlpatterns 변수를 통해 관리되는데, 이 변수는 path() 함수의 파이썬 list 타입이다.

1. 각각의 path() 함수는 패턴이 일치할 때 표시될 뷰에 URL 패턴을 연결하거나, 2. 다른 URL 패턴 테스트 코드 목록에 연결한다. 2번의 경우 패턴은 대상 모듈에서 정의된 패턴의 기본 URL이 된다.

urlpatterns 리스트는 맨 처음에 관리자 애플리케이션의 고유한 URL 맵핑 정의를 갖고 있는 admin.site.urls 모듈에 admin/ 패턴을 가지고 있는 모든 URL을 매핑하는 단일 함수를 정의한다.

 

urlpatterns 리스트에 새로운 리스트 항목을 추가해본다. 

새로운 항목은 요청을 모듈 catalog.urls에 catalog/ 패턴과 함께 전달하는 path()를 포함한다. 만약 www.~~~.com/catalog로 시작되는 요청이 들어오면 catalog/urls.py를 참조해서 매핑한다는 뜻이다.


127.0.0.1:8000을 127.0.0.1:8000/catalog/로 리다이렉트 하도록 설정하기

RedirectView 함수를 사용한다. 이 함수는 path()에 지정된 URL 패턴이 일치할 때 ㅌ첫 번째 인자를 /catalog/로 리다이렉트할 새로운 상대 URL로 간주한다. urls.py에 아래처럼 작성해주자.

path() 함수의 첫 번째 매개변수(parameter)인 ''은 '/'를 의미한다. 만약 첫 번째 매개변수를 '/'로 작성하면 개발 서버를 시작할 때 에러가 발생한다.

CSS, JavaScript와 같은 정적 파일을 이용할 수 있도록 설정하기

개발 중에 정적 파일들을 제공하는 것을 가능하게 하는 코드이다.


catalog 폴더에 urls.py 생성하기

애플리케이션을 만들면서 패턴들을 이곳에 추가할 것이니까 빈 파일을 생성해주자.


위 과정이 해당 프로젝트의 뼈대(skeleton)를 만든 것이다.

테스트하기 전에 db로 마이그레이션 작업을 해야 한다. db에 우리의 애플리케이션에 속한 모든 모델을 포함하도록 업데이트 하는 과정이다.

DB 마이그레이션 실행하기

장고는 ORM(Object-Relational-Mapper: 객체-관계-매퍼)를 사용하여 장고 코드 안에 있는 모델 정의(객체)를 기본 db에서 사용하는 데이터 구조(관계형 DB)에 매핑한다.

모델의 정의를 바꿀 때 마다, 장고는 변화를 추적해서 db 안의 기본 데이터 구조가 모델과 일치하도록 자동적으로 이전(migrate)하는 스크립트를 (/locallibrary/catalog/migrations/)에 생성할 수 있다.

 

DB안에 있는 모델들을 위한 테이블을 정의하기 위해 아래 명령어를 실행하자

manage.py 파일이 있는 디렉토리에서 실행해야함

py -3 manage.py makemigrations
py -3 manage.py migrate

makemigrations는 프로젝트에 설치된 모든 애플리케이션에 대한 migration을 생성한다. 하지만 적용하지는 않는다.

migrate 명령어를 쳐야 실제로 db에 적용된다. 그리고 db에 어떤 것들이 추가되었는지 추적한다.

 

makemigrations를 하니 No changes detected라는 메시지와 db.sqlite3이라는 항목이 새로 생겼음을 볼 수 있다.

그리고 migrate를 하니 보기 좋은 색을 가진 메시지들이 나왔다.


웹 서버 실행
py -3 manage.py runserver

그리고 127.0.0.1:8000으로 접속하면 404 페이지가 나온다.

 /catalog/urls.py에 아무것도 써주지 않았기 때문이다.

 

/admin/을 쳐보면 정상적으로 나오는 것을 볼 수 있음

 

728x90
반응형

'프로그래밍 > 장고' 카테고리의 다른 글

장고 secret key 분리하기  (0) 2022.07.01
장고 개발 환경 세팅하기  (0) 2022.06.30

댓글