순서
1. django module 맛보기
2. django template 맛보기
3. django model & ORM
Python 라이브러리 중 django 라는 모듈에 대해 글을 써보고자 합니다. django는 web framework로 데이터베이스 기반 웹페이지 작성을 쉽게 하기 위한 것을 목적으로 만들어진 모듈입니다. 저 같은 경우에는 간단한 웹페이지를 Python으로 만들어 보려했을 때 사용해보았는데요. 많이 사용해 보지는 않았지만 사용해보니 django 라이브러리가 나름의 매력이 많은 것 같아서 추후에도 많이 사용할 것 같아서 정리해 보고자 합니다. 아직 문서를 한번에 완성하기에 관련 공부도 덜 되었지만, 중간 중간 작업을 하며 문서 자체를 보강해 보고자 합니다.
문서가 디테일하지는 않아서 어쩌면 대부분의 분들에게 죄송스럽게도 이문서가 별로 도움은 안될지도 모릅니다. 맛보기라 생각해 주시면 감사하겠습니다. 혹 틀린 부분이나 보강해야 할 부분이 있다고 생각되시면 댓글 부탁드립니다.
1. project 의 시작
pip install django
django-admin startproject config .
빈 프로젝트 폴더를 만든 후 위와 같이 pip 명령을 통해 django 모듈을 설치합니다. 설치후에는 현재 프로젝트 (경로)에 django 모듈 설치후 사용 할 수 있는 django-admin 프로그램 명령을 이용하여 django 프로젝트를 준비시킵니다.
명령후에는 위와 같이 현재폴더에 config라는 폴더가 생기며 이곳에 웹서버 구동에 필요한 각종 설정파일이 생깁니다. 또한 웹서버를 관리하기 위한 manage.py 파일이 추가됩니다. 뒤에서는 이 파일을 이용하여 각종 세팅을 좀 더 편리하게 진행하게 됩니다.
2. app 추가
django-admin startapp [app이름]
django-admin startapp testapp
먼저 웹서버에서 제공할 app을 추가합니다. app을 추가하면 현재 프로젝트에는 아래와 같이 app이름의 폴더가 생기고 app 과 관련된 파일들이 기본적으로 생성됩니다. 여기서는 testapp라는 app을 추가해 보도록 하겠습니다.
3. config / settings.py - 기본설정
앞에서 만든 config폴더에는 django의 기본 setting을 하기 위한 settings.py 파일이 존재합니다. 여러 변수들이 정의 되어 있는데 여기서 이번에 변경할 만한 것들만 일단 간단하게 설명드리겠습니다. 다음을 참고해 주십시오.
변수 | 설명 |
LANGUAGE_CODE | 'ko-kr' 로 세팅시 django 및 admin 설정이 한글로 변경됩니다. |
TIME_ZONE | 'Asia/Seoul' 로 세팅시 글쓰기 시간이 한국시간으로 기록됩니다. |
4. config / urls.py
이제 django로 만든 웹서버의 url 접근에 따른 응답을 설정해 보도록 하겠습니다. config 폴더에 urls.py 파일을 열어보면 urlpatterns라는 변수 하나가 정의 되어 있는데 이것을 우리가 추가한 testapp의 view와 연결해 보도록 하겠습니다.
from django.contrib import admin
from django.urls import path
from testapp import views as test_view
urlpatterns = [
path('admin/', admin.site.urls),
path('test/',test_view.index),
]
<<2. app 추가>> 과정을 통해 특정 [app_name]으로 app을 만들었을 때 [app_name]으로 폴더가 생성되는데 이때 views.py라는 파일이 생성됩니다. 여기에 함수를 만들고 (여기서는 index라는 이름의 함수를 만듬), 경로를 위와 같이 연결하면 '주소/test' 페이지에 접속하면 index 함수가 호출되고 리턴값이 화면에 표시되게 됩니다. 참고로 index 함수의 간단한 형태는 다음과 같습니다.
from django.http import HttpResponse
def index(request):
text:str = "<head></head><body>hello</body>"
return HttpResponse(text)
5. 서버 구동 중간 테스트
python manage.py runserver [포트번호/생략시 8000]
python manage.py runserver
웹서버를 이제 특정포트로 시작해 봅니다. 시작 후에 웹서버 관련 코드 변경점이 생겼을 시 (코드 수정 후 저장) 자동으로 재시작/적용됩니다. 그냥 시작해 보면 다음과 같이 경고가 뜹니다.
mingration 하기전에는 admin, auth, contenttype, sessions을 사용하지 못할거라네요. migration 대한 설명은 다음에 기회가 되긴 얘기하기로 하고, 여기서는 일단 Ctrl+C를 눌러 프로그램을 종료하고 위에서 말한 것과 같이 다음의 명령을 수행하도록 하겠습니다.
python manage.py migrate
위의 명령을 수행 후 서버를 시작하면 이제 경고가 사라집니다. 이제 브라우저에서 'http://localhost:8000/test/' 접속하여 만든 웹페이지에 봅니다. 그러면 다음과 같이 우리가 만든 test의 index 페이지가 잘 뜨는 것을 확인하실 수 있습니다.
6. static file
웹페이지 내에서 static file (이미지 파일 등)을 사용하려는 경우가 있습니다. 이런 고정된 파일은 보통 아파치 서버등의 별개의 웹서버를 구축하고 이를 사용하는 것을 권장합니다. 허나 테스트를 이런 것을 연동하기에는 불편함이 있기에 django 모듈 내에서도 static 리소스를 사용할 수 있는 방법을 제공합니다. (써보면 성능이 좋다고 보긴 어려우므로 제대로된 사이트를 구축할거라면 따로 구축하는 편이 좋다고 생각합니다.) 먼저 static 파일이 담긴 폴더를 등록해야 합니다. 다시 config / settings.py 파일을 엽니다. 이 파일에 보면 STATIC_URL 라는 변수가 'static/' 값으로 등록되어 있습니다. 이것을 기본 static 파일을 외부에서 액세스 하기 위한 URL 경로입니다. 현재 개발프로젝트내의 실질적인 파일 시스템에서의 경로를 추가하려면 STATICFILES_DIRS을 추가해야 합니다. 다음과 같이 추가합니다.
import os
STATICFILES_DIRS = [
# BASE_DIR / 'static', # app 별로 관리되지 않는 static
os.path.join(BASE_DIR, 'testapp', 'static'),
]
위는 프로젝트 폴더내의 static 폴더 (본 예제에서는 쓰지 않으므로 주석처리)와 app폴더 (testapp)의 하위 static 폴더에 static file이 있다고 지정한 것입니다. 개발시 static 파일들은 각 폴더에 분산되어 필요한 곳에 넣어 관리하면 되지만 실질적으로 배포시에 하나의 폴더에 복사되어 관리할 수 있습니다. 간단하게 다음과 같이 app 폴더에 static 폴더를 만들고 sample 이미지를 넣어두고 추후 뿌려보도록 하겠습니다.
이제 testapp의 views.py 파일로 가서 다음과 같이 sample.png을 출력하게 변경해 봅니다. django.templatetags.static 모듈을 이용하면 우리가 추가한 파일을 손쉽게 가져다 쓸 수 있습니다.
from django.http import HttpResponse
from django.templatetags.static import static
def index(request):
text:str = "<head></head><body><img src=" + static("sample.png") + "></body>"
return HttpResponse(text)
이제 웹페이지에 다시 들어가 확인해 보면 우리가 넣은 이미지가 뜨는 것을 확인하실 수 있습니다.
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
그리고 위와 같이 추가로 config / settings.py 내에서 변수를 넣어 두면 실서비스 전에 다음의 명령을 통해 배포시 staticfiles라는 폴더가 생기며 static file은 이곳에 따로 모을 수 있습니다.
python manage.py collectstatic
추후 이파일들을 모아서 아파치 서버에 복사후 STATIC_URL만 변경하면 손쉽게 static 리소스의 경로를 변경하실 수 있습니다.
샘플코드 : Link
다음글: 2024.05.25 - [Python] - [Python] django (2/3) template 맛보기
'Python' 카테고리의 다른 글
[Python] django (2/3) template 맛보기 (0) | 2024.05.25 |
---|---|
[Python] datetime (2) | 2024.02.06 |
[Python] Argument Parser (0) | 2024.02.02 |
[Python] wxPython 맛보기 (0) | 2023.12.14 |
[Python] Config Parser (0) | 2023.12.11 |