본문 바로가기
Back-End/Django

[ Django ] 벼락치기 1일차

by 2CHAE._.EUN 2022. 6. 19.

Django Framework : 파이썬으로 작성된 가장 대표적인 웹 프레임워크

 

Framework : 틀, 뼈대

 

* 백엔드 : 웹 서버스의 동작과 논리적 처리를 담당하는 역할


pyenv : 파이썬 버전 설치, 관리

pyenv-virtualenv : 가상 환경을 구성, 파이썬 패키지 관리

 

윈도우 사용시 WSL 필요 →  macOS 와 비슷한 개발 환경을 windows에서 만들 수 있다.

* WSL( Windows Subsystem for Linux ) : windows에서 리눅스 터미널을 사용할 수 있게 해주는 확장 프로그램

 

global 가상환경 : 시스템 전역에 적용하는 환경

→  global 가상환경을 적용하면 따로 지정해주지 않아도 기본적으로 global 환경을 사용

local 가상환경 : 특정 디렉토리 내부에서만 적용되는 환경

→  global 환경이 지정되어 있더라도 local 환경이 적용된다.

 

django는 디렉토리에 설치하는 것이 아니라 파이썬 가상 환경인  django-envs에 설치하는 것이다. 

* django-envs : 파이썬 가상환경의 이름

* 심볼릭 링크 : 어떤 파일이나 디렉토리에 쉽게 접근하기 위해서 바탕화면에 만들어지는 바로가기와 같은 기능


Django는 변경된 작업 결과를 확인할 수 있는 개발 서버를 자체적으로 제공한다.

 

개발 서버( Development Server ) : runserver로 실행한 서버

→ 보안 관련 성능을 보장하지 않는 확인용 서버임

 

* 클라이언트 : 웹 브라우저와 같이 서버에 무언가를 요청하는 부분


[ 프로젝트 관련 명령어 ]

 

프로젝트 생성하기

django-admin startproject [ 프로젝트이름 ]

 

[ Django 프로젝트 구조 ]

 

1. project root : 프로젝트의 모든 파일이 담겨있는 최상위 디렉토리

* root는 이름을 마음대로 변경해도된다.

 

① manage.py : Django 프로젝트 관리를 위한 명령어를 지원

→ 앱 생성( APP ), 데이터베이스 관련 명령, 개발 서버 실행 등

 

② dp.sqlite3 : 프로젝트에서 사용하는 데이터베이스 파일

 

2. project app : 프로젝트의 가장 중심이 되는 app → 프로젝트를 위한 여러 파일이 담겨있는 디렉토리

* app은 이름을 바꿀 경우 많은 수정을 해야한다. 

 

① __init__.py : __init__.py가 있는 디렉토리는 파이썬 패키지로 인식하게끔 하기 위해 사용 

→ 하위버전호환을 위해 적어주는게 좋음

 

② settings.py : 프로젝트에 대한 설정 ( 프로젝트의 전반적인 설정을 담당 )

→ 시간대, 데이터베이스, 여러 경로 설정 등 

 

③ urls.py : URL을 보고 알맞은 로직(View)로 연결해주는 역할

 

④  wsgi.py : WebServer Gateway Interface 

→ 웹 서버와 파이썬 어플리케이션인 Django가 웹 통신을 하는데 필요한 일종의 프로토콜


[ Django App 생성하기 ]

 

* 프로젝트 VS 앱

프로젝트 : 웹 서비스 전체

앱 : 기능을 나타내는 단위

 

1. 앱 생성하기

python manage.py startapp [ 앱이름 ]

 

2. 앱 하위 파일 확인해보기

 

① __init__.py : __init__.py 파일이 있는 디렉토리를 파이썬 패키지로 인식하기 위해 필요

② admin.py : 앱을 django 관리자와 연동하기 위해 필요한 설정 파일

③ apps.py : 앱에 대한 설정을 넣어놓는 파일

④ models.py : django app에서 사용할 데이터 모델 정의 ( 데이터베이스 연동과 관련된 파일 )

⑤ views.py : django app의 메인 로직 처리와 관련된 파일

⑥ tests.py : 프로젝트의 테스트 코드를 작성하는 곳

⑦ migrations : 데이터베이스의 변경 사항 히스토리 누적

 

3. 새로운 앱을 만들었다면 Django에게 새로운 앱을 만들었다는 사실을 알려줘야한다.

 

프로젝트의 settings.py의 INSTALLED_APPS에 추가를 해주면 된다.

* INSTALLED_APPS : 프로젝트를 구성하고 있는 앱의 목록

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

 

* 프로젝트 생성시 db.sqlite3가 생성이 안되어있는 경우

python manage.py migrate

[ URL 설정해보기 ]

 

1. urls.py의  urlpatterns에 url을 어떻게 처리할 지에 대해 설정하면 된다. 

 

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('project/', include('project.urls'))
]

 

2. app에 urls.py를 생성 후 코드 작성하기

from django.contrib import admin
from django.urls import path
from . import views

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

 

3. views.py에서 index 함수를 가져오기 위해 index 함수를 적어주기

from django.shortcuts import render
from django.http import HttpResponse

# Create your views here.
def index(request):
    return HttpResponse("<h2>Hello my world!")

 

4. Django 개발 서버 실행

python manage.py runserver

 

5. http://127.0.0.1:8000/project/index/ 로 접속하기


[ 클라이언트와 서버 ]

 

 

클라이언트 : 웹 브라우저, 모바일 앱 등 자원을 요청하는 파트이다.

서버 : 클라이언트의 요청으로부터 웹 페이지뿐만 아닌 여러가지 형태의 자원 및 서비스를 클라이언트에 제공

 

URL = 도메인( Domain ) + 경로( Path )  

* 도메인( Domain ) : 요청할 서버를 찾아주는 역할 / 요청을 처리하는 서버

* DNS : 인터넷 상의 주소록 

* Path : 요청하는 내용을 담고 있음 ( 서버안에서 원하는 것이 있는 위치 )

→ URL : 내가 원하는 자원을 찾기 위한 주소로 웹 브라우저가 서버에게 자원을 요청하는 일종의 문자열

 

클라이언트가 URL를 이용해서 서버를 찾고 요청을 보내면 서버는 그에 해당하는 서비스를 제공한다.

 

Django는 프로젝트가 실행이 되면 app 안에 있는 urls.py부터 가장 먼저 확인한다. settings.py에는

ROOT_URLCONF 라는 Django가 URL을 보고 가장 먼저 어떤 파일을 봐야할지 설정하는 부분이 존재한다. 

 

urls.py의 urlpatterns 부분의 path( 'project/', include('project.urls') )의 의미는 project가 매칭이 되었으면
project 안에 있는 urls 파일을 확인하라는 의미이다.

* urls.py : 클라이언트의 요청인 URL을 보고 알맞은 로직을 제공하기 위해 계층적으로 구성된다. 

 

project의 urls.py를 확인해보면 urlpatterns에는 path( 'index/', views.index )가 존재한다. index 와 매칭이 된다면 views.index를 가리키게 되고 views.py에 존재하는 index 함수를 실행하게 된다.

 

* 다른 URL로 이동하기 위해 URL을 적을 때 앞에 /를 작성한다면 도메인으로부터의 경로를 의미하게 된다.


 [ 루트 페이지 설정하기 ]

 

1. urls.py

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('project/', include('project.urls')),
    path('', include('project.urls'))
]

 

2, project app의 urls

from django.contrib import admin
from django.urls import path
from . import views

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

[ views.py에서 HTML 코드를 별도로 작성하는 방법 ]

 

* Template : 화면 구성을 담당하는 부분

 

1. APP 디렉토리 아래 templates 디렉토리 생성

2. views.py 코드 수정

from django.shortcuts import render
from django.http import HttpResponse

# Create your views here.
def index(request):
    return render(request, 'project/index.html')

render함수는 넘겨준 정보와 템플릿을 토대로 하나의 httpResponse 객체를 만들어서 리턴해준다.

 

* render() : 인자로 주어진 템플릿을 사전형(dict)인자인 context와 결합해서 렌더링을 거친 다음 HttpResponse 객체로

반환하는 함수이다. 즉, 인자로 넘겨주는 템플릿과 context 데이터를 합쳐서 HttpResponse 객체로 돌려준다.

 

필수 인자는 request와 template_name이다.

request : 데이터를 요청한 요청 객체를 넘겨준다. view 인자로 들어온 request를 그대로 render에 사용한다.

 

* rendering 

① template 언어를 사용해서 작성한 코드를 일반적인 HTML 코드로 바꿔주는 과정

② HTML 파일을 브라우저가 읽어서 우리가 실제로 보는 웹 페이지로 바꿔주는 과정


[ MVT 구조 ]

 

M → Model : 데이터 구조 생성, 데이터베이스와 소통

 

V → View : 웹 사이트의 로직을 담당, Model과 Template 사이를 연결해 요청을 처리하는 역할을 수행

 

T → Template : 웹 사이트의 화면 구성 담당, 매번 바뀌는 동적인 화면을 구성

 

* 클라이언트와 서버 패턴

클라이언트는 서버스를 요청하는 부분이고 서버는 요청을 받아서 서비스를 제공하는 부분이다.

서버는 클라이언트의 요청을 기다리고 있다가 클라이언트로부터 요청이 들어오면 요청에 맞는 서비스를 제공하게 된다.

ex) 인터넷 웹 사이트, 온라인 게임

 

* MVC 패턴

Model은 데이터를 저장, 보관하고 View는 사용자에게 보여지는 부분을 담당하며, Controller는 사용자의 입력을 받아 내부 로직을 처리한다. 

 

* MVC 모델과 MVT 모델의 차이

MVT는 데이터 구조를 만들고 데이터베이스와의 소통을 담당하는 Model, 로직을 담당하는 View, 화면 구성을 담당하는 Template 으로 이루어진 구조이다. MVC 모델에서 View가 하는 역할을 Template이 하고  Controller가 하는 역할을 View가 맡아서 처리하게 된다.

 

MVC 모델에서 Controller가 모든 요청을 맡아 처리한다면 MVT 모델에서는 요청을 받아 처리하는 역할의 일부를 분리해 Django 프레임워크가 직접 처리한다.

'Back-End > Django' 카테고리의 다른 글

[ Django ] GCP 가상 서버 배포하기  (0) 2022.06.21
[ Django ] 벼락치기 2일차  (0) 2022.06.21