Django를 공부하면서 아직 미비한 부분이 많아서 공식문서 튜토리얼대로 한번 학습을 해보려고 한다.
최고의 학습자료는 공식 문서라고 하는데!? 한번 시작 해보겠습니다.
*본 포스팅은 Django 설치 방법 및 가상환경 세팅 , 초기 서버 구동 등 기본적인 장고 개발 환경 가이드는 생략이 되어있습니다.
Django로 설문조사(Polls) 애플리케이션 만들어 보기
프로젝트 구조는 아래 두 파트로 구성이 되어 있다.
- 유저가 설문 내용을 보고 직접 투표할 수 있는 사이트
- 관리자가 설문 추가/변경/삭제할 수 있는 어드민 사이트
1. 프로젝트 만들기
터미널에서 코드를 저장할 디렉토리로 이동 후, 아래 명령어를 실행합니다.
💡Django에서는 mysite와 같은 디렉토리가 프로젝트 루트 디렉토리이면서 동시에 Python 패키지로 동작합니다.
이 폴더 안에는 settings.py, urls.py 등을 포함하는 패키지 역할을 하며 프로젝트의 구성과 설정을 담고 있는 중요한 폴더로 사용 됩니다.
$ django-admin startproject mysite
장고 프로젝트는 아래와 같이 구성됩니다.
mysite/
manage.py
mysite/
__init__.py
settings.py
urls.py
asgi.py
wsgi.py
- manage.py: Django 개발에서 DB 관리, server/test 실행 모든 프로젝트 관리 작업을 이 스크립트를 통해 수행 가능합니다.
- 프로젝트 내부 'mysite/' : 해당 디렉토리는 프로젝트 실제 Python 패키지이며 패키지명입니다. (e.g. mysite.urls)
- __init__.py: Python에서 이 파일이 있으면 "이 폴더는 파이썬 패키지"라고 알려주는 역할을 합니다.
- settings.py: 프로젝트에 관련된 모든 설정 값을 담고 있습니다.
- urls.py: 웹사이트 경로 맵핑 해주는 역할을 합니다.
- wsgi.py (Web Server Gateway Interface): 웹서버와 Django 애플리캐이션을 연결하는 인터페이스로 주로 동기식 웹 애플리케이션에 사용합니다.
- asgi.py (Asynchronous Server Gateway Interface): WSGI의 비동기 버전으로 동시 여러 요청 처리 가능합니다.
*wsgi.py, asgi.py는 아직 저도 파악이 안된 상태라, 추후 자세히 포스팅 할 예정
2. 설문조사 앱 만들기
터미널에서 코드를 저장할 디렉토리로 이동 후, 아래 명령어를 실행합니다.
$ python manage.py startapp polls
'polls' 앱 구성은 아래와 같습니다.
polls/
__init__.py
admin.py
apps.py
migrations/
__init__.py
models.py
tests.py
views.py
이 디렉토리 구조는 polls(투표) 애플리케이션의 기능 구현을 위한 구성들입니다.
🫨장고 프로젝트와 앱 차이?
프로젝트는 웹 사이트에 대한 구성 및 앱의 모음이다.
앱은 프로젝트의 구성 기능으로 해당 사이트에서 작업을 수행하는 웹 애플리케이션이다.
3. 첫 번째 뷰 작성 및 URL 맵핑
사용자가 웹 브라우저를 통해 Django 서버로 특정 URL을 요청하면 Django가 이 요청을 처리합니다.Django가 URL 패턴에 따라 적절한 뷰 함수를 찾아서 호출할 때 첫 번째 인자로 request 객체를 자동으로 전달합니다.
# polls/views.py
from django.http import HttpResponse
def index(request):
return HttpResponse("Hello, world. You're at the polls index.")
예를 들어, 사용자가 /polls/ 경로로 접속했을 때 해당 URL에 맵핑된 index함수와 같은 뷰함수가 호출됩니다.
# polls/urls.py
from django.urls import path
from . import views
urlpatterns = [
path("", views.index, name="index"),
]
'/polls/' URL이 index 뷰함수와 연결되어 있다면 Django에서 index(request)를 호출하며 request 객체를 전달합니다.
request 객체에 포함할 수 있는 정보는 아래와 같은 형태로 구성되어 있습니다.
request = {
'method': 'GET',
'path': '/polls/',
'GET': {}, # GET 파라미터 (예: ?name=value 형태의 쿼리스트링)
'POST': {}, # POST 데이터 (폼 데이터 등)
'COOKIES': {}, # 쿠키 데이터
'META': {
'HTTP_USER_AGENT': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) ...',
'HTTP_HOST': 'example.com',
'REMOTE_ADDR': '123.456.789.012',
# 기타 헤더 및 환경 정보
},
'user': AnonymousUser, # 로그인하지 않은 경우 익명 사용자
}
4. 전역 URL 설정
현재까지는 앱에서 URL 맵핑하였는데, 웹사이트 주소창에 입력된 주소를 polls 앱이 처리할 수 있도록 mysite 프로젝트 전역 URL 설정에 polls앱의 URL 설정을 해주어야합니다.
다른 URL 설정 파일을 포함 시킬때 django.urls.include 를 import 해주어야 합니다.
include() 함수를 사용하여 polls.urls 를 포함 시킵니다.
# mysite/urls.py
from django.contrib import admin
from django.urls import include, path
urlpatterns = [
path("polls/", include("polls.urls")),
path("admin/", admin.site.urls),
]
💡include() 함수를 사용하는 이유는 URL 설정을 모듈화하기 위해서입니다.
- 각 앱마다 독립적인 urls.py를 가질 수 있어 코드 구조가 깔끔해집니다.
- 큰 프로젝트에서 URL 관리가 용이합니다
- 동일한 URL 패턴을 여러 경로에서 재사용할 수 있습니다.
* polls/urls.py 가 존재하는 한, 여러 경로를 정의하더라도 잘 동작됩니다.
# mysite/urls.py
from django.urls import include, path
urlpatterns = [
path('polls/', include('polls.urls')), # 이렇게 해도 되고
path('voting/', include('polls.urls')), # 이렇게 해도 되고
path('survey/election/', include('polls.urls')), # 이렇게 해도 되고
]
polls.urls에서는 실제 view 함수들과 연결되는 더 구체적인 URL 패턴들이 정의됩니다.
# polls/urls.py
from django.urls import path
from . import views
urlpatterns = [
path('', views.index), # /polls/, /voting/, /survey/election/
path('detail/<int:id>', views.detail), # /polls/detail/1, /voting/detail/1 등
]
마무리
part2 포스팅에서 계속 됩니다.
'Programming👩🏻💻 > Web framework' 카테고리의 다른 글
[Django] 공식문서로 익혀보기 part4.2 - 함수/클래스뷰, 제네릭뷰 (1) | 2024.11.30 |
---|---|
[Django] 공식문서로 익혀보기 part4.1 - 폼(Form) 작성하기 (1) | 2024.11.24 |
[Django] 공식문서로 익혀보기 part3 - views 작성 (2) | 2024.11.19 |
[Django] 공식문서로 익혀보기 part2 - 데이터베이스 설치 (6) | 2024.11.15 |
Django - URL 패턴 name 속성 (0) | 2024.08.09 |