230424 월요일
학습 주제
0. 개발 환경 설정 (for MAC)
Django 웹 개발하기
Python을 설치하였고, Python의 venv라는 모듈을 사용해서 Django 프로젝트의 가상 환경을 설정해준다.
* 가상환경을 설정해주는 이유는?!
여러 프로젝트들을 로컬 서버라는 한 공간에 넣어서 관리한다면, 매번 어떠한 하나의 프로젝트를 실행할 때마다 그에 맞춰서 환경을 체크하고 변경해주어야 하며 심한경우에는 프로젝트간의 충돌이 발생할 수도 있기 때문에 각 프로젝트들을 다룰 때마다 가상환경을 구축하여 사용하는 방법이 권장된다.
1. Python에서 원하는 프로젝트 폴더 안에 가상 환경을 생성한다. (이때 프로젝트 폴더가 없는 경우 설정한 이름으로 생성된다.)
2. 가상환경을 활성화한다. 정상적으로 활성화 되었다면 터미널 명령어 앞에 설정한 가상환경 이름 (나의 경우엔, django-venv)가 나타난다.
3. 비활성화하는 방법도 알아보자.
4. 가상환경을 생성했으면, 이제 그 위에 Django를 설치한다.
5. Django가 정상적으로 설치되었는지 버전을 체크하는 명령어를 통해 확인해본다.
# 1. 가상환경 생성
python -m venv project-name
# 나의 경우에는 아래와 같이 작성하였다.
python3 -m venv django-venv
# 2. 가상환경 활성화
source django-venv/bin/activate
# 3. 가상환경 비활성화
deactive
# 4. 가상환경 활성화 상태에서 Django 설치하기
pip install django
# 나의 경우에는
pip3 install django
# 5. Django 설치 확인
python3 -m django --version
1. Django Project 생성하기
가상환경이 활성화 된 상태에서 프로젝트를 만들고 싶은 빈 폴더를 하나 만든다.
해당 폴더로 이동 후
1. 새로운 Django 프로젝트를 생성한다.
2. 생성한 프로젝트를 서버에서 실행한다.
# 1. mysite라는 새로운 Django 프로젝트 생성
django-admin startproject mysite
# 2. 생성한 프로젝트로 이동 후 manage.py라는 파일을 이용하여 서버에서 실행
python3 manage.py runserver
127.0.0.1:8000 의 주소로 접속하고 아래와 같은 페이지가 보인다면 서버가 성공적으로 실행 된 것이다!
2. Django App 생성하기
위에서 mysite라는 프로젝트를 하나 생성하였다. 이것은 하나의 웹사이트 개념이 되는 것이고, 이 안에 여러 개의 앱을 만들 수 있다. 생성할 앱들은 다른 사이트에서도 동작이 가능한 형태가 될 것이다.
위에서 활성화했던 서버를 잠시 끄고 polls라는 이름을 가진 Django App을 생성한다.
python3 manage.py startapp polls
vscode에서 프로젝트를 연결해보면 mysite아래에 polls라는 app이 생기고, 그 밑에 초기 몇 개의 파일들이 자동으로 생성되어있는 것을 확인할 수 있다.
다시 서버를 활성화해놓고, 이제 웹페이지를 하나씩 만들어 보자.
먼저 polls 아래에 urls.py 라는 파일을 생성하여 url을 연결해줄 것이다. 이때 기본으로 생성되어있는 mysite의 urls.py 파일을 참고하여 동일한 형태로 작성하였다. 그 전에 mysite에도 polls의 url을 등록해주어야 한다.
그리고 polls 밑에 자동으로 생성되어있는 view.py에 내용을 입력해서 그 내용이 출력되는 하나의 간단한 페이지를 동작하게 해보자.
- mysite/urls.py
# 필요한 모듈들을 알아서 import 해준다.
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path("admin/", admin.site.urls), # admin 페이지로 향하는 url로, 자동으로 생성되어있다.
path("polls/", include('polls.urls')) # 추가해주자.
]
- polls/urls.py
from django.urls import path
from . import views
urlpatterns = [
path('',views.index, name='index') # 127.0.0.1:8000/polls 로 접속하였을 때 나타나는 페이지이다.
]
- polls/views.py
# HttpResponse를 보내서 "Hello, world."를 출력하는 간단한 페이지이다.
from django.http import HttpResponse
def index(request):
return HttpResponse("Hello, world.")
3. URL 경로(path) 설정하기
위에서 작성한 polls/views.py는 polls app에 접속했을 때 바로 나타나는 페이지이다.
이 페이지 이외에 하나의 페이지를 더 만들어 보았다.
- polls/views.py
from django.http import HttpResponse
def index(request):
return HttpResponse("Hello, world.")
def some_url(request):
return HttpResponse("Some url을 구현해 봤습니다.")
- polls/urls.py
from django.urls import path
from . import views
urlpatterns = [
path('',views.index, name='index')
path('some_url',views.some_url) # 127.0.0.1:8000/polls/some_url
]
3.99. 관계형 데이터베이스(RDB)
관계형 데이터베이스(RDB, Relational DataBase)는 데이터를 행과 열로 이루어진 테이블의 형태로 구성하고, 테이블 간의 관계를 정의하는 데이터베이스이다.
RDB의 용어 몇가지를 알아보자.
- 테이블 (table)
- 열 (column)
- 행 (row)
Django 에서는 모델 (Model)이라는 개념을 활용해서 RDB와의 연동을 구현한다.
모델은 데이터베이스에서 테이블에 해당하며, 각 모델은 필드(Field)를 가지고 있다.
4. 모델 만들기
실제로 웹 페이지가 동작할 때는 위의 views.py 에서 "Hello, World."라고 정적으로 적은 내용들이 출력되는 경우는 거의 없고, 데이터베이스가 따로 있고 DB가 서버와 연동되어 DB 안에 있는 내용들이 입출력되는 경우가 대부분이다.
장고에서는 이 내용들을 모델이라고 하고, 이건 DB의 테이블 개념과 일대일 대응하는데, polls/models.py 파일에 모델을 만들어보고, 마이그레이션을 진행해보았다. 자세한 내용은 코드의 주석에서 설명한다.
- mysite/settings.py
...
# Application definition
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'polls.apps.PollsConfig', # polls라는 app을 등록해주는 과정이다.
# polls 폴더 아래에 apps.py에 있는 PollsConfig를 등록해준다.
]
...
- polls/models.py
# 이 파일에 모델을 만들고, 이 모델을 DB의 테이블로 만들기 위한 마이그레이션을 진행한다.
from django.db import models
# Question 모델
class Question(models.Model):
question_text = models.CharField(max_length=200)
pub_date = models.DateTimeField('date published')
# Choice 모델
class Choice(models.Model):
# question의 FK로 지정
question = models.ForeignKey(Question, on_delete=models.CASCADE)
choice_text = models.CharField(max_length=200)
votes = models.IntegerField(default=0)
- migration 파일 생성하기
python manage.py makemigrations polls
- migration으로 실행될 SQL 문장 살펴보기
# 0001버전의 마이그레이션 내용을 SQL 문장으로 살펴본다.
python manage.py sqlmigrate polls 0001
- migration 실행하기
python manage.py migrate
5. 장고의 다양한 모델 필드 활용하기
6. Django Admin - 관리자 계정 생성하고 접속하기
7. Django Admin - 모델 등록하기
8. Django Shell 사용하기
9. Django Shell - 현재 시간 구하기
10. Django Shell - 레코드 생성하기
11. Django Shell - 레코드 수정 및 삭제하기
12. Django Shell - 모델 필터링(Model Filtering)
13. Django Shell - 모델 필터링(Model Filtering) 2
14. Django 모델 관계기반 필터링
15. Django Shell - 모델 메소드
어려웠던 내용
'[프로그래머스] 데이터엔지니어링 데브코스 1기 > TIL (Today I Learned)' 카테고리의 다른 글
TIL_day21 Data Warehouse, Cloud (2) | 2023.05.09 |
---|---|
TIL_day12 (2) | 2023.04.25 |
TIL_day7 (0) | 2023.04.18 |
TIL_day4 (0) | 2023.04.13 |
TIL_day2 (0) | 2023.04.11 |