Django?
Django. 장고는 파이썬 기반의 웹 프레임워크로, 간편하고 빠르게 웹 어플리케이션을 만들 수 있는 도구입니다!
이번 포스팅에서는 Django의 개념과 실습을 통해 앱을 만들어보며 Django의 다양한 기능에 대해 설명하겠습니다!
해당 가이드는 https://docs.djangoproject.com/en/5.1/intro/tutorial01/ 를 기반으로 작성하였으며, Django 프로젝트 생성과 polls라는 앱을 통한 간단한 투표 시스템에 대한 실습과 설명입니다!
1. Django 프로젝트 만들기
Django에서 프로젝트란?
Django에서 프로젝트는 하나의 웹사이트 또는 웹 애플리케이션 전체를 의미!
프로젝트는 여러 개의 앱을 포함할 수 있으며, 이를 통합하여 하나의 웹사이트로 구성!
mysite 프로젝트 생성
$ django-admin startproject mysite
# 해당 구조를 갖는 mysite 프로젝트 생성!
mysite/
manage.py
mysite/
__init__.py
settings.py
urls.py
asgi.py
wsgi.py
해당 명령어를 실행하면 mysite라는 프로젝트가 생성됩니다!
성공적으로 생성되었다면, 실제로 실행을 해보아야겠죠??
$ python manage.py runserver
해당 명령어를 실행하여 문제가 없다면 http://127.0.0.1:8000/에 접근이 가능하게 됩니다!
2. Polls app 만들기
app이란?
Django에서의 app은 특정 기능이나 역할을 담당하는 모듈!
재사용 가능하도록 설계되어, 다른 프로젝트에서도 쉽게 가져와 사용 가능!
polls app 생성
$ python manage.py startapp polls
# 해당구조를 갖는 polls app이 생성된다!
polls/
__init__.py
admin.py
apps.py
migrations/
__init__.py
models.py
tests.py
views.py
3. Views 만들기
View란?
웹 애플리케이션의 핵심적인 구성 요소 중 하나로, 사용자 요청을 처리하고 적절한 응답을 반환하는 로직을 담당하는 함수 또는 클래스!
View의 역할
- 사용자가 웹사이트에 URL을 통해 요청을 보낼 때, 이를 처리하는 역할
- 요청을 처리한 후, HTML, JSON, 파일 등 다양한 형식의 응답 반환
- 필요에 따라 데이터베이스에서 데이터를 읽거나 수정한 후, 응답으로 전달
View의 종류
- 함수형 뷰 : 함수 형태로 구성된 가장 기본적인 형태로, 요청을 받아서 처리하고 응답을 반환하는 단순한 로직에 적합
- 클래스 기반 뷰 : 뷰 로직을 더 구조화하고 재사용성을 높이기 위해 클래스 형태로 구성하며, 기본적인 클래스 기반 뷰를 상속받아 기능확장 가능! -> 복잡한 로직과 다양한 HTTP 메서드를 처라할 때 좋다!!
이번 실습에서는 간단한 실습을 다루기에 함수형 뷰를 생성하여 진행하겠습니다.
뷰 생성 (polls/views.py)
from django.http import HttpResponse
def index(request):
return HttpResponse("안녕")
이와 같이 생성된 index라는 뷰는 사용자의 요청을 받게 된다면 "안녕"이라는 응답을 전달하게 됩니다.
하지만, 실행해보면 "안녕"이 나오지 않습니다!
그 이유는 URL에 연결하지 않았기 때문입니다!!
4. URL 연결하기
앞서 말씀드린 것과 같이 뷰를 정상적으로 사용하기 위해! URL 패턴이 정의되어있는 urls.py에 새롭게 생성한 index의 정의를 추가해주어야합니다!
polls/urls.py
from django.urls import path
from . import views
urlpatterns = [
path("", views.index, name="index"),
]
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),
]
이와 같이 polls의 urls에만 추가하는 것이 아닌, 프로젝트 mysite의 urls 또한 polls의 정의를 추가하여, 사용할 수 있게 하는 글로벌 URLconf를 구성해주어야 합니다!!
이제 http://localhost:8000/polls/에 접속하면, 앞에서 생성한 index라는 view가 호출되어 "안녕."이라는 응답을 받은 것을 확인할 수 있습니다!
5. Django에서의 데이터베이스 정의와 ORM
설명하기에 앞서 Django에서는 기본적으로 sqlite3라는 데이터베이스 엔진을 제공하며, ORM(Object Relational Mapping)이라는 효율적인 기능을 제공합니다.
ORM이란?
ORM은 데이터베이스와의 상호작용을 객체 지향적으로 처리할 수 있도록 돕는 기능으로, SQL 쿼리문을 직접 작성하지 않고도, Python 코드로 데이터베이스의 레코드(행)와 테이블(모델)을 조작할 수 있습니다!
즉, 데이터베이스 테이블을 파이썬 클래스로 표현하고, 데이터베이스의 각 행을 파이썬 객체로 다룰 수 있게하는 기능을 제공합니다!!
모델(테이블) 정의 (polls/models.py)
from django.db import models
# 질문 테이블, 질문과 작성 날짜를 가짐
class Question(models.Model):
question_text = models.CharField(max_length=200)
pub_date = models.DateTimeField("date published")
# 선택 테이블, Question을 참조하며 cascade 제약조건을 가지며, 선택과 투표 수를 가짐
class Choice(models.Model):
question = models.ForeignKey(Question, on_delete=models.CASCADE)
choice_text = models.CharField(max_length=200)
votes = models.IntegerField(default=0)
6. 생성한 모델(테이블)을 데이터베이스에 반영하기
우선 프로젝트에 앱을 포함하기 위해 해당 구성 클래스에 대한 참조를 추가해야 합니다!
mysite/settings.py
INSTALLED_APPS = [
"polls.apps.PollsConfig", # polls.apps에 대한 참조 추가!
"django.contrib.admin",
"django.contrib.auth",
"django.contrib.contenttypes",
"django.contrib.sessions",
"django.contrib.messages",
"django.contrib.staticfiles",
]
이렇게 참조를 추가했다면, 모델을 데이터베이스에 반영하기 위한 마이그레이션(migration) 작업을 진행할 수 있습니다!
마이그레이션 파일 생성
$ python manage.py makemigrations polls
# 위의 명령어를 실행한다면, 아래와 같은 내용을 출력합니다!
Migrations for 'polls':
polls/migrations/0001_initial.py
+ Create model Question
+ Create model Choice
# 아래 명령어를 실행한다면, 위에서 실행한 명령이 SQL로 변환되어 나오는 것을 확인할 수 있습니다!!
$ python manage.py sqlmigrate polls 0001
위처럼 마이그레이션 파일을 생성했다면, 해당 내용을 데이터베이스에 실제로 생성되게 해야합니다!
마이그레이션 실행!
$ python manage.py migrate
해당 migrate 명령을 통해 현재 적용되어 있지 않은 모든 마이그레이션을 가져오고, 이를 데이터베이스에 반영하는 작업이 이루어지게 됩니다!
마치며..
이번 포스팅에서는 우선 Django 프로젝트를 만들고, 앱을 생성하여 직접 모델을 작성하고 반영해보는 작업을 해보았습니다!
저또한 많이 다루어보지 않았지만, 손쉽게 웹 애플리케이션을 개발할 수 있다는 점이 큰 장점으로 다가오는 웹 애플리케이션 프레임워크라고 생각합니다!
다음 포스팅에서는 Django의 Admin을 생성하는 방법과 Admin. 그 자체에 대해 얘기해보고자 합니다!
오늘 포스팅도 봐주셔서 감사합니다!
'Django' 카테고리의 다른 글
[Django] Django - 5 (View & Template) (0) | 2024.10.10 |
---|---|
[Django] Django - 4 (Handling models in shell - Part 2) (0) | 2024.10.10 |
[Django] Django - 3 (Handling models in shell - Part 1) (2) | 2024.10.08 |
[Django] Django - 2 (Admin) (0) | 2024.10.08 |