www.youtube.com/watch?v=xv_bwpA_aEA&list=PL-51WBLyFTg2vW-_6XBoUpE7vpmoR3ztO&index=1
www.youtube.com/watch?v=QvTyqta3OJo&list=PL-51WBLyFTg2vW-_6XBoUpE7vpmoR3ztO&index=2
이 포스팅은 다음과 같은 youtube 영상을 따라하면서 배운 내용과 학습 내용을 담은 것이다:
- Dennis Ivy - What is Django? | Getting Started | Django Framework (3.0) Crash Course Tutorials (pt 1) ()
- Dennis Ivy - URLS and Views | Django Framework (3.) Crash Course Tutorials (pt 2)
나는 현재 Django Version 3.1.2 를 쓰고 있다. Django는 파이썬을 쓰는 오픈소스 웹 프레임워크이다. 웹사이트 만들때 주로 쓰며, 간단한 것이 큰 특징이다.
1. Downloading Django / Setting up a project and application
Django를 시작하기 위해서는 Django를 먼저 다운받아야 한다. 다음의 command lined을 powershell이나 cmd에 입력하면 된다.
pip install django
이후, django project를 setup 시켜주어야 하는데, 다음의 command line을 이용한다:
django-admin startproject crm1
project 이름이 crm1인 이유는 내가 따라하고 있는 유투버가 crm1이라는 이름의 project로 시작했기 때문이다.
crm1 이라는 이름의 파일이 생긴 것을 알 수 있는데, 이 구성을 한번 보자:
crm1
ㄴ manage.py
ㄴ db.sqlite3
ㄴ cmr1
ㄴ __pycyache__
ㄴ __init__.py
ㄴ asgi.py
ㄴ settings.py
ㄴ urls.py
ㄴ wsgi.py
- manage.py는 절대 건들면 안되는 파일이다. 이를 통해 우리의 Django를 실행시키는 파일이라고 생각하면 된다
- wsgi.py는 Django가 우리 사용자를 위해 웹서버를 set up 해주는 것이다
- urls.py는 url routing system file 이라고 생각하면 된다
- settings.py는 간단하게 말해 커맨드 센터이다. 우리가 이 앱에서 해야할 메인 configuration들은 여기서 이루어진다고 보면 된다. Database를 변형시킬때는 항상 settings.py도 알맞게 변형시켜야 한다.
Django project는 설치했으니, Django가 제대로 작동 되는지 확인해봐야한다. 똑같은 terminal에 다음과 같은 command line을 실행시킨다;
python manage.py runserver
이후, 서버 주소가 뜨는데, 나같은 경우에는 http://127.0.0.1:8000/이다. 여기에 들어가면 다음과 같은 화면이 나타난다:
Django를 정상적으로 잘 설치했다는 뜻이다.
Django project도 설치했고 server도 잘 돌아가는 것을 확인했으니, 다음은 project 안에서 실행될 app을 만들어낼 차례이다.
앱의 개념을 사람들은 이해하기 조금 힘들수도 있지만, 페이스북을 예로 들면 간단하게 생각할 수 있다. 페이스북에는 프로필, 뉴스피드, 그룹 등과 같이 여러개의 구성으로 나뉘어 있는데, 이 각각을 다 서로 다른 application이라고 생각하면 된다. Dennis Ivy는 만약 한 줄로 간단하게 특정 app이 뭐하는지 정의하기 힘들다면, 그 application을 여러개로 분리시켜야 한다고 조언한다.
이 앱을 만들기 위해서는 다음과 같은 command line을 terminal에서 실행시키면 된다:
python manage.py startapp accounts
여기서 accounts라는 app을 만드는 이유는 Dennis Ivy가 accounts 만 만들려고 하기 때문이다.
project에 app이 추가된 후의 crm1 폴더의 구성을 보자. 다음과 같다:
crm1
ㄴ accounts
ㄴ __pycyache__
ㄴ migrations
ㄴ __init__.py
ㄴ admin.py
ㄴ apps.py
ㄴ models.py
ㄴ tests.py
ㄴ views.py
ㄴ cmr1
ㄴ __pycyache__
ㄴ __init__.py
ㄴ asgi.py
ㄴ settings.py
ㄴ urls.py
ㄴ wsgi.py
ㄴ db.sqlite3
ㄴ manage.py
여기서 accounts foler 안에 urls.py가 없는데, urls.py를 추가주어야 한다. 무조건 그래야 하는 것은 아니지만 그러는 것이 훨씬 더 편하게 구성을 짜기가 편하다.
- models.py에서 우리가 데이터베이스(database)를 만들고 class-based-objects를 만든다. 파일 구성을 나타내기도 한다.
- views.py는 함수들을 실행시키고 url들을 실행시키기도 한다.
여기서 중요한 것은 urls.py / views.py / html이다. 다음의 그림을 참고하라:
우선, html에서의 요청이 들어오면, 그 요청을 urls.py로 보낸다. urls.py에서 알맞은 요청을 찾아 views.py로 보내고, views.py에서는 그 요청에 알맞는 함수를 찾아 실행시켜 html 요청자에게 보낸다.
app(accounts)에 urls.py를 추가한 후, 다음과 같은 코드를 써준다:
from django.urls import path
from . import views
urlpatterns = [
path('', views.home),
]
여기서 urlpatterns는 요청 받는 url의 patterns가 될 것이고(path(''. views.home)은 예시로 썼다.), import views를 하는 이유는 views.에 있는 home이라는 함수를 불러오기 위해서이다. 여기서 보듯이 path의 마지막에는 항상 쉼표를 붙여줘야 하는데, 이를 하지 않으면 error가 발생한다.
urls를 이렇게 설정해주면, crm1 기본 프로젝트에 있던 urls.py 도 같이 변형시켜줘야 한다:
"""crm1 URL Configuration
The `urlpatterns` list routes URLs to views. For more information please see:
https://docs.djangoproject.com/en/3.1/topics/http/urls/
Examples:
Function views
1. Add an import: from my_app import views
2. Add a URL to urlpatterns: path('', views.home, name='home')
Class-based views
1. Add an import: from other_app.views import Home
2. Add a URL to urlpatterns: path('', Home.as_view(), name='home')
Including another URLconf
1. Import the include() function: from django.urls import include, path
2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
"""
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include(accounts.url)),
]
path('', include(accounts.urls)), 를 해주어야한다. 역시 쉼표 또한 조심해야 하고 from django.urls 에서 include 또한 import 해주어야한다.
마지막으로 이렇게 새로운 app을 추가하게 되면, settings.py를 변형시켜줘야 한다. 다음과 같은 부분을 settings.py에서 찾고 'accounts'를 추가해주면 된다:
...
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'accounts',
]
...
중요한 것은, 위의 urls.py와 마찬가지로 'accounts'를 추가한 뒤, 쉼표(,)를 추가해주지 않으면 error가 난다. 항상 주의해줘야한다.