티스토리
장고 소개
장고(Django)는 파이썬으로 작성된 오픈 소스 웹 프레임워크입니다. 장고는 다양한 기능을 제공하여 웹페이지 개발을 쉽고 빠르게 할 수 있도록 도와줍니다.
Django는 다음과 같은 이유로 웹 서버 프레임워크 중 가장 유명합니다.
- 생산성 향상: Django는 다양한 기능을 제공하여 웹페이지 개발을 쉽고 빠르게 할 수 있도록 도와줍니다.
- 보안 강화: Django는 기본적으로 보안을 강화하는 기능을 제공합니다.
- 확장성: Django는 다양한 모듈과 프레임워크를 사용하여 확장할 수 있습니다.
장고의 주요 기능은 다음과 같습니다.
( 아래 내용은 나중에 다시 공부할 예정이니 한번만 읽고 스킵 하자!)
- 모델-뷰-템플릿(MVC) 패턴을 지원하여 웹페이지의 구조를 명확하게 구분할 수 있습니다.
- 모델-뷰-템플릿(MVC) 패턴은 웹 애플리케이션을 개발하는 데 사용되는 소프트웨어 디자인 패턴입니다. 이 패턴은 애플리케이션을 세 가지 구성 요소로 분리합니다.
- 모델: 애플리케이션의 데이터와 비즈니스 로직을 담당합니다. 예를 들어, 사용자, 제품 또는 주문과 같은 개체를 나타내는 클래스를 포함할 수 있습니다.
- 뷰: 사용자 인터페이스를 담당합니다. 웹 페이지를 생성하고 사용자 입력을 처리합니다.
- 템플릿: 뷰가 사용하는 HTML 코드를 생성합니다
- MVC 패턴은 다음과 같은 몇 가지 장점이 있습니다.
- 관심사 분리: 각 구성 요소는 애플리케이션의 특정 측면에만 집중하므로 코드가 더 이해하기 쉽고 유지 관리하기 쉽습니다.
- 재사용성: 구성 요소를 개별적으로 빌드하고 재사용할 수 있으므로 애플리케이션을 더 빠르게 개발할 수 있습니다.
- 확장성: 구성 요소를 쉽게 추가하거나 제거할 수 있으므로 애플리케이션을 쉽게 확장할 수 있습니다.
- MVC 패턴은 웹 애플리케이션을 개발하는 데 널리 사용되는 인기 있는 패턴입니다. Django, Rails 및 ASP.NET MVC와 같은 많은 인기 있는 웹 프레임워크는 MVC 패턴을 기반으로 합니다.
- 자동화된 폼 처리 기능을 제공하여 폼의 생성 및 처리를 쉽게 할 수 있습니다.
- Django는 폼을 생성하고 처리하기 위한 강력한 기능을 제공합니다. 이러한 기능을 사용하면 폼 HTML을 생성하고, 사용자 입력을 유효성 검사하고, 유효한 입력을 Python 데이터로 변환할 수 있습니다.
- 이건 한번 읽고 스킵하자. 다시 자세하게 다뤄볼 예정.
- 다양한 유효성 검사 기능을 제공하여 사용자 입력의 유효성을 검사할 수 있습니다.
- 로그인, 로그아웃, 권한 관리 등의 기능을 제공하여 보안을 강화할 수 있습니다.
- 템플릿 엔진을 제공하여 동적인 웹페이지를 쉽게 만들 수 있습니다.
1. 장고 설치
장고는 설치 및 구성에서 매우 유연( 윈도우, 맥 OS X, 리눅스/유닉스 )하며,
여러 운영 체제에서 설치가 가능합니다.
- 가능한 최신 버전을 사용할 것을 권장합니다.
(3.7이상 추천)
- 장고는 네 가지 메인 데이터베이스(PostgreSQL, MySQL, Oracle 그리고 SQLite)를 지원
* SQLite는 가벼운 데이터베이스로 사용하기에 적합해서 주로 읽기 전용인 응용 프로그램을 위해서는 추천.
장고를 설치하려면 다음 명령어를 실행합니다.
pip install django
이 명령어는 장고의 최신 버전을 설치합니다.
장고를 설치한 후에는 다음 명령어를 실행하여 새로운 프로젝트를 생성합니다.
django-admin startproject costzerocode
이 명령어는 costzerocode라는 이름의 Project를 생성. 프로젝트 디렉토리에는 다음과 같은 파일들이 생성됩니다.
- __init__.py: 프로젝트의 시작 파일
- settings.py: 프로젝트의 설정 파일
- urls.py: 프로젝트의 URL 맵핑 파일
- wsgi.py: 프로젝트의 WSGI 구성 파일
2. 장고의 기본 개념
장고의 기본 개념은 다음과 같습니다.
- 모델: 데이터베이스의 테이블과 일치하는 클래스입니다.
- 뷰: HTTP 요청을 처리하는 함수입니다.
- 템플릿: HTML 코드에 동적인 데이터를 포함하는 파일입니다.
일단 이런게 있구나 하고, 코드를 만들면서 위의 개념을 익혀 봅시다.
3. 장고로 웹페이지 만들기
장고로 간단한 웹페이지를 만들려면 다음 단계를 따릅니다.
- 모델을 정의합니다.
- 뷰를 정의합니다.
- 템플릿을 정의합니다.
- URL 맵핑을 정의합니다.
모델 정의
모델을 정의하려면 models.py 파일에 다음과 같은 코드를 작성합니다.
from django.db import models
class MyModel(models.Model):
name = models.CharField(max_length=255)
이 코드는 MyModel이라는 모델을 정의합니다. name 필드는 문자열 데이터를 저장하는 필드입니다.
뷰 정의
뷰를 정의하려면 views.py 파일에 다음과 같은 코드를 작성합니다.
클래스 기반 뷰 (Class-Based Views)
클래스 기반 뷰는 Django의 뷰를 클래스로 정의할 수 있게 해줍니다. 이 방식은 뷰의 재사용성과 코드의 구조화를 더욱 쉽게 해줍니다. 아래는 views.py 파일에 클래스 기반 뷰를 정의하는 예제입니다.
from django.http import HttpResponse
from django.views import View
# 클래스 기반 뷰 예제
class IndexView(View):
def get(self, request):
return HttpResponse("Hello, world. You're at the index page.")
이 코드는 IndexView()이라는 뷰를 정의합니다. 이 뷰는 index.html이라는 템플릿을 렌더링합니다.
IndexView 클래스는 View 클래스를 상속받아 정의되며, HTTP GET 요청을 처리하는 get 메소드를 포함하고 있습니다. 이 메소드 역시 사용자의 요청을 받아서 텍스트를 포함한 HTTP 응답을 반환합니다.
함수형으로 구현한 코드 예 :
함수 기반 뷰 (Function-Based Views)
함수 기반 뷰는 Django에서 뷰를 정의하는 가장 기본적인 방식입니다. 아래는 views.py 파일에 함수 기반 뷰를 정의하는 간단한 예제입니다.
from django.http import HttpResponse
# 함수 기반 뷰 예제
def index(request):
return HttpResponse("Hello, world. You're at the index page.")
두 예제 모두 Django 프로젝트의 views.py 파일에 추가한 후, 해당 뷰를 URLconf에 연결해야 합니다. 함수 기반 뷰는 그대로 URLconf에 추가하면 되고, 클래스 기반 뷰는 .as_view() 메소드를 호출하여 연결합니다.
# urls.py 예제
from django.urls import path
from .views import index, IndexView
urlpatterns = [
path('fbv/', index, name='fbv-index'), # 함수 기반 뷰 연결
path('cbv/', IndexView.as_view(), name='cbv-index'), # 클래스 기반 뷰 연결
]
이렇게 하면 /fbv/ URL로 접근할 때는 함수 기반 뷰가, /cbv/ URL로 접근할 때는 클래스 기반 뷰가 처리하게 됩니다.
템플릿 정의
템플릿을 정의하려면 templates 디렉토리에 index.html 파일을 생성하고 다음과 같은 코드를 작성합니다.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>My Site</title>
</head>
<body>
<h1>My Site</h1>
<p>{{ name }}</p>
</body>
</html>
이 코드는 name 변수를 사용하여 모델의 데이터를 출력합니다.
URL 맵핑 정의
URL 맵핑을 정의하려면 urls.py 파일에 다음과 같은 코드를 작성합니다.
간단한 애플리케이션에 대한 기본 URL 패턴을 정의합니다.
from django.contrib import admin
from django.urls import path
from myapp import views
urlpatterns = [
path('', views.index, name='index'),
path('admin/', admin.site.urls),
]
코드 리뷰:
- Imports:
- django.contrib.admin: 사이트 콘텐츠를 관리하기 위한 admin유저의 인터페이스를 포함합니다.
- 장고의 특화된 장점이라고 하는 관리자에 대한 기능이 다양하게 제공된다.
- django.urls.path: URL 패턴 정의 가능합니다.
- myapp.views: "myapp"이라는 애플리케이션에서 뷰를 가져옵니다.
- django.contrib.admin: 사이트 콘텐츠를 관리하기 위한 admin유저의 인터페이스를 포함합니다.
- URL 패턴:
- path('', views.index, name='index'):
- 루트 URL (/)을 myapp.views의 index 뷰 함수에 매핑합니다.
- 이 패턴에 이름 index를 지정하여 템플릿 및 코드에서 쉽게 참조할 수 있습니다.
- path('admin/', admin.site.urls):
- /admin/에서 액세스할 수 있는 Django 관리 인터페이스에 대한 URL 패턴을 포함합니다.
- path('', views.index, name='index'):
- myapp.views의 뷰가 적절하게 정의되고 요청을 올바르게 처리하는지 확인하십시오.
- myapp 애플리케이션의 구조를 일관성과 모듈성에 대해 검토하십시오.
- 애플리케이션을 확장할 계획이라면 그에 따라 더 많은 URL 패턴을 추가하십시오.
- 사용자 입력, 데이터베이스 상호 작용 또는 기타 기능을 처리하는 뷰를 포함하는 것을 고려하십시오.
마무리
- 이번 포스팅은 django-admin startproject 명령을 이용해 어떻게 새로운 장고 웹사이트를 생성할 수 있는지 간단하게 확인했습니다.
궁금한 사항은 댓글을 통해서 남겨 주시면 답변 드리겠습니다.
감사합니다.