[천재교육] 프로젝트 기반 빅데이터 서비스 개발자 양성 과정 9기
학습일 : 2024.08.12
📕 학습 목록
- Django 개요
- MTV 패턴
- 요청 - 응답 흐름
- Django 프로젝트
📗 기억할 내용
[Django 개요]
장고는 파이썬으로 작성된 고수준 웹 프레임워크로, 웹 애플리케이션을 빠르고 효율적으로 개발할 수 있도록 여러 기능을 제공함. 장고는 웹 개발에 필요한 많은 기능을 내장하고 있어 코드의 반복을 줄이고 개발 시간을 절약할 수 있음
1. 장고 기본 개념
- 장고 프로젝트: 웹 애플리케이션을 만드는 기본 단위. 하나의 프로젝트는 여러 앱으로 구성될 수 있음
- 앱(App): 프로젝트 내에서 특정 기능을 담당하는 모듈. 예를 들어 블로그 기능이 필요한 경우 블로그 앱을 만들 수 있음
- MTV 패턴: 장고는 MVC 패턴의 변형인 MTV(Model-Template-View) 패턴을 따름
- Model: 데이터베이스 구조를 정의하고 데이터를 관리
- Template: 사용자에게 보여지는 HTML 등의 레이아웃을 구성
- View: 클라이언트의 요청을 받고, 처리 후 응답을 반환하는 로직
2. MTV 패턴의 요청-응답 흐름
1. 웹 클라이언트: 사용자가 웹 브라우저나 다른 클라이언트를 통해 서버에 요청(Request)을 보냄
2. URL Conf (URL Configuration): 장고에서 URL과 뷰(View)를 연결해 주는 설정 파일. 클라이언트의 요청이 들어오면 URL Conf가 이를 분석하여 어떤 뷰로 전달할지 결정함
3. View: URL Conf에 의해 호출된 뷰는 클라이언트의 요청을 처리. 요청을 바탕으로 필요한 데이터베이스 작업(CRUD: Create, Read, Update, Delete)을 Model을 통해 수행하고, 처리 결과를 Template에 전달함
4. Model: 데이터베이스와 연동된 데이터 구조를 정의하는 부분. ORM(Object-Relational Mapping)을 통해 데이터베이스와 상호작용하며, 데이터를 저장하고 가져오는 작업을 수행함
5. DB (Database): Model에서 정의된 데이터 구조는 데이터베이스에 저장. Model은 ORM을 통해 데이터베이스와 통신하여 데이터를 저장하고 조회함
6. Template: View에서 전달된 데이터를 사용하여 HTML 등으로 렌더링(rendering)하는 역할. 클라이언트에게 보일 화면을 생성함
7. Response: Template을 통해 생성된 화면을 응답(Response)으로 클라이언트에 반환하여 웹 페이지가 사용자에게 표시됨
[Django 프로젝트]
1) 장고 설치 및 프로젝트 생성
① 장고 설치
pip install django
② 프로젝트 생성
django-admin startproject myproject
③ 앱 생성
python manage.py startapp myapp
2) 프로젝트 및 앱 구조
- 장고 프로젝트를 생성하면 다음 구조가 나타남
myproject/
├── myproject/
│ ├── __init__.py
│ ├── settings.py # 설정 파일
│ ├── urls.py # URL 매핑
│ ├── asgi.py
│ └── wsgi.py
└── myapp/
├── migrations/
├── __init__.py
├── admin.py # 관리자 페이지 설정
├── apps.py
├── models.py # 데이터베이스 모델 정의
├── tests.py # 테스트 코드
├── views.py # 비즈니스 로직
└── urls.py # 앱별 URL 매핑
3) 모델 (Model)
- 데이터베이스의 구조를 정의하는 역할
- 모델을 정의한 후, 장고가 이를 데이터베이스 테이블로 변환해 줌
# myapp/models.py
from django.db import models
class Post(models.Model):
title = models.CharField(max_length=200)
content = models.TextField()
created_at = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.title
4) URL 설정
- 장고는 urls.py 파일을 통해 URL을 관리함
- 프로젝트와 앱별로 URL을 설정하여 라우팅할 수 있음
# myproject/urls.py
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('myapp.urls')), # myapp의 URL 설정을 포함
]
# myapp/urls.py
from django.urls import path
from . import views
urlpatterns = [
path('', views.index, name='index'),
path('post/<int:id>/', views.post_detail, name='post_detail'),
]
5) 뷰 (View)
- 요청을 처리하고 응답을 반환하는 역할
- 함수형 뷰(Function-based view)와 클래스형 뷰(Class-based view) 두 가지 방식이 있음
- 함수형 뷰: 파이썬 함수를 사용하여 요청을 처리하는 방식. URL과 직접 연결된 함수로, 주로 짧고 간단한 로직을 구현할 때 사용. 함수형 뷰는 가독성이 높고 이해하기 쉽지만, 복잡한 로직을 구현하거나 여러 요청 방식을 처리할 때 코드가 복잡해질 수 있음
- 클래스형 뷰: 파이썬 클래스를 사용하여 뷰를 정의하는 방식. 코드의 재사용성을 높이고, 특정 기능을 위한 장고의 제네릭 뷰를 상속받아 빠르게 뷰를 구현할 수 있는 장점이 있음. 복잡한 뷰 로직을 깔끔하게 정리할 수 있고, 다양한 HTTP 메서드(GET, POST 등)를 별도의 메서드로 관리할 수 있어 더 구조화된 코드 작성을 지원함
# myapp/views.py
from django.shortcuts import render, get_object_or_404
from .models import Post
def index(request):
posts = Post.objects.all()
return render(request, 'myapp/index.html', {'posts': posts})
def post_detail(request, id):
post = get_object_or_404(Post, id=id)
return render(request, 'myapp/post_detail.html', {'post': post})
6) 템플릿 (Template)
- 템플릿은 HTML 파일로, 사용자에게 보여지는 화면을 구성
- 장고의 템플릿 엔진을 사용하여 동적 데이터를 표시할 수 있음
<!-- myapp/templates/myapp/index.html -->
<!DOCTYPE html>
<html>
<head>
<title>My Blog</title>
</head>
<body>
<h1>Blog Posts</h1>
<ul>
{% for post in posts %}
<li><a href="{% url 'post_detail' post.id %}">{{ post.title }}</a></li>
{% endfor %}
</ul>
</body>
</html>
<!-- myapp/templates/myapp/post_detail.html -->
<!DOCTYPE html>
<html>
<head>
<title>{{ post.title }}</title>
</head>
<body>
<h1>{{ post.title }}</h1>
<p>{{ post.content }}</p>
<p>Published on: {{ post.created_at }}</p>
</body>
</html>
7) 관리자 페이지 설정
- 장고는 기본적으로 관리자 페이지를 제공
- admin.py 파일에서 모델을 등록하여 관리자 페이지에서 데이터를 관리할 수 있음
# myapp/admin.py
from django.contrib import admin
from .models import Post
admin.site.register(Post)
8) 데이터베이스 마이그레이션
- 모델을 정의한 후, 데이터베이스에 반영하기 위해 마이그레이션을 진행해야 함
python manage.py makemigrations
python manage.py migrate
9) 장고 서버 실행
- 장고 서버를 실행하여 로컬에서 개발 중인 웹 애플리케이션을 확인할 수 있음
python manage.py runserver
📙 내일 일정
- Django 웹 애플리케이션 개발
'TIL _Today I Learned > 2024.08' 카테고리의 다른 글
[DAY 25] Django 웹 애플리케이션 개발, 웹 크롤링 (0) | 2024.08.14 |
---|---|
[DAY 24] Django 웹 애플리케이션 개발 (0) | 2024.08.13 |
[DAY 22] Flask (0) | 2024.08.09 |
[DAY 21] Flask (0) | 2024.08.08 |
[DAY 20] SQL (0) | 2024.08.07 |