글 추천 웹 만들기
Django 환경설정
python -m venv venv
source venv/Scripts/activate
pip install django
django-admin startproject website
cd website
python manage.py startapp web
장고 => MTV [Model, Template, View]
서버쪽 데이터베이스 : Model
웹페이지 화면 만들기 : Template
템플릿에서 서버(데이터베이스)에 데이터 전송 및 처리: View
View 만들기
web/views.py
from django.shortcuts import render
from django.http import HttpResponse
def home(request):
return HttpResponse("This is home.")
연결해주기 위해서 urls.py 파일 생성 후 아래 코드 작성
web/urls.py
from django.urls import path
from . import views
urlpatterns = [
path('', views.home, name='home'),
]
이제 전체 프로젝트에 연결해주기 위해서 프로젝트 urls.py에 연결
website/urls.py
from django.contrib import admin
from django.urls import include, path
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('web.urls')),
]
만약에 path('', include('web.urls'))가 아니라 path('home/', include('web.urls')) 이라고 작성하면, 서버 주소/home에 web.urls를 연결함.
Model 만들기
Django에는 기본적으로 sqlite3에 DB 저장.
website/setting.py에 default로 환경이 저장되는데 우선 DB부분은 아래와 같이 있음.
사용하고 싶은 DB 설정 가능.
ex) 'django.db.backends.sqlite3','django.db.backends.postgresql','django.db.backends.mysql','django.db.backends.oracle', 등
DB 이름
추가적으로 SQlite를 사용하지 않으면, USER, PASSWORD, and HOST 를 필수적으로 세팅해주어야 함. (참고: DATABASES.)
우선 default인 SQlite를 사용하여 프로젝트 진행.
web/models.py
from django.db import models
class Post(models.Model):
title = models.CharField(max_length=50) #제목
description = models.TextField() # 본문
pub_date = models.DateTimeField('date published') #날짜/시간
def __str__(self):
return self.title
def summary(self):
return self.description[:20]
class Choice(models.Model):
title = models.ForeignKey(Post, on_delete=models.CASCADE)
choice_text = models.CharField(max_length=200)
votes = models.IntegerField(default=0)
Post: 글 저장. 제목, 본문, 작성 날짜
Choice: 추천 수 저장. 추천하는 글 제목, 선택 글, 투표수
Post와 Choice는 외래키로 연결되어있음. 외래키는 제목으로 선택. Post이 지워질시 cascade하게 Choice도 지워지도록 설정.
votes는 default값(초기값)은 0으로 설정.
이 스키마를 이전에 작성했던 application과 연결해주어야함. website/setting.py에 'web' 추가.
website/setting.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'web',
]
이후 모델에 적용하기 위해 커맨드 입력
python manage.py makemigrations
python manage.py migrate
web/migrations 폴더에 다음과 같은 파일 생성, 커맨드 나타남. 이렇게 되면 데이터베이스까지 연결 완료.
makemigrations는 application의 model에 대한 변화 기록.
migrate는 makemigrations의 변화 기록을 참고하여 실제 프로젝트 모델 스키마에 application의 모델 변화사항을 반영.