Django 시작해보기

Haiin·2021년 5월 22일
0

장고란

파이썬으로 만들어진 무료 오픈소스 웹 애플리케이션 프레임워크.
쉽고 빠르게 웹사이트를 개발할 수 있도록 돕는 구성요소로 이루어진 웹 프레임워크이다.

프론트엔드에서 웹사이트 만들기를 빠르고 쉽게 도와주는 라이브러리인 리액트와 맥락이 같다.

백엔드에서 웹사이트 개발 을 돕는 프레임워크라는 것은 웹사이트를 구축할 때 비슷한 유형의 요소들이 항상 필요하다는 것에서 시작한다. 회원가입, 로그인, 로그아웃과 같이 사용자 인증을 다루는 방법이나 웹사이트의 관리자 패널, 폼, 파일 업로드와 같은 것들을 말하는 것이다. 이런 구성요소들을 갖춘 프레임워크중 하나가 장고다.

장고 시작하기

장고의 기본 골격을 만들어주는 스크립트를 실행한다. 이 디렉토리와 파일 묶음은 나중에 사용할 것이다.
장고에서는 디렉토리와 파일명이 매우 중요하다. 파일명을 마음대로 변경해서도 안되고 다른 곳으로 옮겨도 안된다. 장고는 중요한 것들을 찾을 수 있게 특정한 구조를 유지해야 한다.

1. 폴더 만들기

원하는 곳에 가상환경을 실행시킬 폴더를 만들어 준다.

2. 폴더 안에서 가상환경 설치하기

가상환경 설치할 때 venv 와 virtualenv 두가지 명령어가 있는데
python3 -m venv haiinenv1
python3 -m virtualenv haiinenv1
venv는 python3에 기본 내장되어 있기 때문에 python3라면 virtualenv대신 venv를 사용하면 된다. 둘 다 정상적으로 가상환경이 잘 생성된다.

3. 가상환경안으로 들어가서 장고 설치하기

가상환경을 설치했으면 장고를 설치해야 하는데 그전에 pip가 최신인지 항상 업그레이드를 하고 설치한다.

4. 드디어 장고 시작

django-admin startproject mysite .

. 은 한칸 띄고 작성하는데 그 폴더에 만드려면 꼭 넣어야 한다.

django-admin.py 는 스크립트로 디렉토리와 파일들을 생성한다. 스크립트 실행 후에는 아래와 같이 새로 만들어진 디렉토리 구조를 볼 수 있다.

상위에 haiinenv 폴더 아래 manage.pymysite 가 위치해 있다.

  • manage.py 는 스크립트인데 사이트 관리를 도와주는 역할을 한다. 이 스크립트로 다른 설치 작업 없이, 컴퓨터에서 웹 서버를 시작할 수 있다.

  • settings.py 는 웹사이트 설정이 있는 파일이다.

  • urls.py 파일은 urlresolver 가 사용하는 패턴 목록을 포함하고 있다.

어플리케이션 만들기

python manage.py startapp blog



장고 모델 (Model)

모델이란 부가적인 메타데이터를 가진 데이터베이스의 구조(layout)를 말한다.
데이터의 필수적인 필드들과 동작들을 포함한다. DRY 원칙에 다라 데이터 모델을 한곳에서 정의하고, 이것으로부터 자동으로 뭔가를 유도하는 것이 목표이다.

Here, each model is represented by a class that subclasses django.db.models.Model. Each model has a number of class variables, each of which represents a database field in the model.

각 앱의 모델은 django.db.models.Model. 의 서브클래스인 class 로 대표된다. 클래스는 데이터베이스를 나타내는 것으로 각 모델들은 많은 클래스를 가질 수 있다.

모델 만들기

# 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')

class Choice(models.Model):
    question = models.ForeignKey(Question, on_delete=models.CASCADE)
    choice_text = models.CharField(max_length=200)
    vote = models.IntegerField(default=0)
    

모델의 활성화

모델을 작성했으면 현재 프로젝트에게 polls(앱)이 설치되어 있다는 것을 알려야 한다. 이는 앱의 구성 클래스에 대한 참조를 mysite/setting.pyINSTALLED_APPS 설정에 'polls.apps.PollsConfig' 또는 'polls' 와 같이 경로를 추가하면서 이루어진다.

# settings.py

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'polls',
]

위 model 에 작성한 코드를 가지고 django 는 다음과 같은 일을 할 수 있다.

  • 이 앱을 위한 데이터베이스 스키마 생성 (create table 문)
  • Question 과 Choice 객체에 접근하기 위한 python 데이터베이스 접근 API 생성

(참고로, 이 앱을 다수의 프로젝트에서 사용할 수 있으며, 배포할 수도 있다. 특정 django 사이트에 앱들이 묶여있지 않아도 되기 때문이다.)

python manage.py makemigrations polls

makemigrations 을 실행시키면 모델을 변경시킨 사실과 이 변경사항을 migration으로 저장시키고 싶다는 것을 django 에게 알려준다. => 변경사항에 대한 마이그레이션을 만든다.

python manage.py migrate

위 명령은 아직 적용되지 않은 마이그레이션을 모두 수집해 이를 실행하며, 이 과정에서 모델에서의 변경 사항들과 데이터베이스의 스키마의 동기화가 이루어진다. => 명령을 통해 변경사항을 데이터베이스에 적용한다.


장고 관리자 (Admin)

관리자 사이트는 사이트 방문자를 위한 것이 아니라, 사이트 관리자 를 위한 것이다.
장고는 기본적으로 Admin 앱을 제공한다. 이 관리자 사이트를 커스터 마이징 하여 빠르게 초기 개발을 할 수 있다.

관리자 생성하기

우선 관리 사이트에 로그인 할 수 있는 사용자를 생성한다.

python manage.py createsuperuser

  • username, email, password 를 입력한다.

python manage.py runserver

서버를 실행하면 admin 페이지가 나온다. 위에서 만들어준 username, password 를 입력해주면 아래와 같이 관리자 사이트에 들어가게 된다.

  • staff/superuser 계정에 한해 접근 가능: admin 에서 users 목록을 통해서 permissions 수정할 수 있다.
  • 모델 클래스만 등록하면, 조회/추가/수정/삭제 웹 인터페이스 를 admin 에서 제공한다.
  • 예를 들어 맛집등록 서비스라면 관리자 맛집 등록은 어드민에서 우선 진행하고, 엔드유저를 위한 인터페이스를 우선적으로 먼저 만들 수 있다. (초기 개발시 시간 절약)


관리 사이트에서 poll app 을 변경가능하도록 만들기

관리 사이트에서 만들어준 app 을 변경하도록 하려면 아래의 방법들로 등록해주면 된다.

Model Admin 등록법 1

  • ModelAdmin 으로 등록
#polls/admin.py
from dgango.contrib import admin
from .models import Post


admin.site.register(Post) #기본 ModelAdmin 으로 등록

Model Admin 등록법 2

  • admin.ModelAdmin 상속을 통해 커스터마이징이 가능하다.
# polls/admin.py

from dgango.contrib import admin
from .models import Post

class PostAdmin(admin.ModelAdmin):
	list_display = ['id', 'title', 'created_at', 'updated_at']
    
admin.site.register(Post, PostAdmin) #기본 ModelAdmin 으로 등록

Model Admin 등록법 3

  • decorator 형태로 등록 가능
# polls/admin.py

from dgango.contrib import admin
from .models import Post

@admin.register(Post)
class PostAdmin(admin.ModelAdmin):
	list_display = ['id', 'title', 'content']
    list_display = ['id', 'title']
    

0개의 댓글