HyeLog

[CEOS] 백엔드 1주차 미션 - Django Tutorial 본문

대외 활동/CEOS

[CEOS] 백엔드 1주차 미션 - Django Tutorial

shj718 2023. 3. 26. 16:58

CEOS 17기 백엔드 파트로 활동하게 되었다🙌🙌

1주차 미션을 진행하면서 알게된 점들 정리해보겠다.

 

👩‍💻 파이썬 가상 환경 👩‍💻

파이썬 가상 환경은 파이썬 프로젝트를 진행할 때 독립된 환경을 만들어준다. 예를 들어 파이썬 개발자 A가 2개의 장고 프로젝트 P1, P2를 개발하고 관리한다고 가정하자. 이때 P1, P2에 필요한 장고의 버전이 다를 수 있다. 이때 파이썬 가상 환경을 이용하면, 하나의 PC에 서로 다른 버전의 장고를 설치할 필요 없이, 프로젝트마다 독립된 개발 환경을 구축할 수 있다.

 

1️⃣ 장고 프로젝트 생성

많은 튜토리얼들이 다음의 방법을 사용한다.

(venv) C:\projects> django-admin startproject mysite

하지만 이렇게 프로젝트를 생성하면 mysite 디렉토리 밑에 똑같은 이름의 mysite 앱 디렉토리가 생성되어 mysite/mysite와 같은 구조가 되어 버린다. 이것보다는 mysite 디렉토리가 하나만 있는게 관리가 더 쉬우므로, 나는 아래의 방법을 사용했다!

(venv) C:\projects>mkdir mysite
(venv) C:\projects>cd mysite
(venv) C:\projects\mysite>
(venv) C:\projects\mysite>django-admin startproject config .

이렇게 하면 mysite/config 구조가 되고, config 디렉토리 안에 장고가 필요로 하는 여러 파일들(settings.py, urls.py 등)이 생성된다. mysite 디렉토리 바로 밑에 manage.py 파일도 생성되는 것을 볼 수 있다.

 

2️⃣ Django Tutorial Part. 1 ~ Part. 4 따라하기

📌 개발 서버 실행하기

튜토리얼을 따라해보면서 브라우저를 통해 확인하기 위해 많이 쓰는 명령어다.

$ python manage.py runserver

 

📌 장고 프로젝트 안에 앱 생성하기

mysite 디렉토리에 들어가서 이 명령어를 실행하면 polls 앱 디렉토리가 생성된다.

이런식으로 하나의 프로젝트에 여러 앱을 만들 수 있다.

$ python manage.py startapp polls

polls 디렉토리 밑에 urls.py, views.py, models.py, ... 등이 생긴다.

 

📌 URL 설정하기

앱 디렉토리인 polls 디렉토리 안의 urls.py에서 내 앱에 접속하기 위한 URL 설정을 하고 나면,

최상위 URL 설정 파일(mysite 디렉토리 안의 urls.py)에서도 그 앱의 URL을 등록해야한다.

 

자세한 사항은 튜토리얼 사이트(https://docs.djangoproject.com/ko/3.2/intro/tutorial01/)를 참고하자.

 

📌 View 만들기

아래와 같이 polls/view.py에 'index 함수'를 만들어서 뷰를 설정하고, url 설정에서 'views.index'를 적으면,

해당 URL에 접속했을때 index 함수가 호출되어서 그 뷰가 보이는 방식이다.

from django.http import HttpResponse


def index(request):
    return HttpResponse("Hello, world. You're at the polls index.")
from django.urls import path

from . import views

urlpatterns = [
    path('', views.index, name='index'),
]

 

📌 DB 관리하기

어떤 DB를 사용할 것인지(SQLite, MySQL, Oracle, ...)는 mysite/config/settings.py 에서 관리한다.

 

이 튜토리얼에서 만드는 투표 앱의 DB는 polls/models.py에서 관리한다.

models.py에서 필요한 DB 모델을 설계하면 된다. 튜토리얼에서는 질문(Question) 모델과 선택지(Choice) 모델을 만들었다.

 

만든 모델을 실제로 활성화시켜서 DB에 반영하려면, 내 앱을 등록하고, migration 하는 작업이 필요하다.

이 역시 자세한 사항은 튜토리얼 사이트(https://docs.djangoproject.com/ko/3.2/intro/tutorial02/)를 참고하자.

 

📌 관리자 페이지 만들기

튜토리얼을 따라하면서 가장 놀랐던 부분이다..🫣🫣 장고는 관리자 사이트를 자동으로 만들어준다.

(이전에 스프링으로 플젝 했었을때는 내가 다 직접 만들었었는데..🥲)

 

poll/admin.py에 모델들을 등록하기만 하면, 관리자 사이트(여기서는 http://127.0.0.1:8000/admin/)에서 모델들을 관리할 수 있다.

from django.contrib import admin

from .models import Question

admin.site.register(Question)

 

📌 템플릿 만들기 (동적인 뷰 생성)

실제로 뭔가가 동작하는 뷰를 만들기 위해서는, polls 디렉토리 밑에 templates 디렉토리를 만들어야 한다.

templates 디렉토리 안에 index.html, detail.html, ... 처럼 html 파일로 동적인 뷰를 만들어 주고,

polls/views.py에 템플릿을 불러오는 코드를 작성하면 된다.

 

아래 예시에서는 index 함수가 index.html 템플릿을 불러오고, 이때 context를 템플릿에 전달한다.

from django.http import HttpResponse
from django.template import loader

from .models import Question


def index(request):
    latest_question_list = Question.objects.order_by('-pub_date')[:5]
    template = loader.get_template('polls/index.html')
    context = {
        'latest_question_list': latest_question_list,
    }
    return HttpResponse(template.render(context, request))

 

📌 지름길 render()

위의 '템플릿 만들기'에서 살펴본 방법(템플릿에 context 를 채워넣어 표현한 결과를 HttpResponse 객체와 함께 돌려주는 구문)은 자주 쓰이는 방법이기 때문에 Django는 이런 표현을 쉽게 표현할 수 있도록 단축 기능인 render()를 제공한다. render()를 사용하면 아래와 같이 코드 길이가 단축된다.

from django.shortcuts import render

from .models import Question


def index(request):
    latest_question_list = Question.objects.order_by('-pub_date')[:5]
    context = {'latest_question_list': latest_question_list}
    return render(request, 'polls/index.html', context)

 

📌 제너릭 뷰(generic view) 사용하기

튜토리얼대로 views.py를 작성하다보면, 중복되는 부분들이 존재한다.

이런 뷰들은 URL에 전달된 매개 변수에 따라 데이터베이스에서 데이터를 검색하고 정해진 템플릿을 로드하고 렌더링 된 템플릿을 반환한다.

Django는 이런 일반적인 경우를 위해 제너릭 뷰를 제공한다.

자세한 사용은 튜토리얼 사이트(https://docs.djangoproject.com/ko/3.2/intro/tutorial04/)를 참고하자.

 

📚 Reference

https://docs.djangoproject.com/ko/3.2/intro/tutorial01/

 

Django

The web framework for perfectionists with deadlines.

docs.djangoproject.com

https://kitle.xyz/ez2django/8/

 

8. 투표 상세보기와 투표하고 결과보기 및 제너릭 뷰로 수정하기

## Admin에서 Question과 Choice 구조 되짚어보기 이전에 우리는 투표를 위한 Question을 추가했다. 그리고 이와 매핑되…

kitle.xyz

https://wikidocs.net/72377

 

1-04 장고 프로젝트 생성하기

* 실습 영상 : [https://youtu.be/L9eBUaPTIiA](https://youtu.be/L9eBUaPTIiA) 장고에는 프로젝트라는 개념이 있는데, 장고의 프로…

wikidocs.net

 

'대외 활동 > CEOS' 카테고리의 다른 글

[CEOS] 백엔드 2주차~7주차 미션  (0) 2023.08.04