TIL DAY.14 Django

kyman19940214·2020년 8월 25일
0

MVC & MTV

Model

  • 안전하게 데이터를 저장
    View
  • 데이터를 적절하게 유저에게 보여줌
    Control, Template(Django)
  • 사용자의 입력과 이벤트에 반응하여 Model과 View를 업데이트

Django 개념

Web Browser --> URL Dispatcher (요청된 url을 분석하고 적합한 view로 보내줌) --> View(어디서 어떤 데이터를 가공 할지을 알려주면) --> Model(에서 database와 연결을하고 data를 가져옵니다) --> Database --> Model --> View(에서 실질적으로 client 에게 보여줄 data를 template에게 전송) --> Template가 javascript 나 html 같은걸로 UI만들어서 Web Browser로 넘겨줍니다.

Project 와 APP

-프로젝트 생성
$django-admin startproject tutorial

-app 생성
$./manage.py startapp community
1.프로젝트 내부에 다수의 app생성

manage.py
-프로젝트 관리 명령어 모음
-주요 명령어
1.startapp -앱생성
2.runserver -서버실행
3.createsuperuser -관리자 생성
4.makemigrations app -app의 모델 변경 사항 체크
5.migrate -변경 사항을 DB에 반영
6.shell -쉣을 통해 데이터를 확인
7.collectstatic -static파일을 한 곳에 모음
-ex) ./manage.py runserer 0.0.0.0:8080

폴더트리 설명

-outer mysite: a container for my project.(이름 상관 없음)
-manage.py: Django 프로젝트와 다양한 방법으로 상호 작용하는 커맨드 라인의 유틸리티
-mysite/: 프로젝트를 위한 실제 python 패키지들이 저장됨.
-init.py: init python 에게 이 디렉토리를 패키지처럼 다루라고 알려주는 용도의 단순한 빈 파일.
-setting.py: 현재 Django프로젝트의 환경 및 구성을 저장함.
-urls.py: 현재 Django project의 URL 선언을 저장. Django로 작성된 사이트의 목차라고도 할 수 있음. Settings.py 안에 있는 ROOT_URLCONF에 settings/url.py 에 하겠다고 선언해두었기 때문.
-asgi.py: 현재 프로젝트를 지원하기 위한 ASGI 호환 웹 서버의 진입점 (엔트리 포인트)
-wsgi.py: 현재 프로젝트를 서비스 하기 위한 WSGI 호환 웹 서버의 진입점.

Django Tutorial

  1. project 만들기 : django-admin startproject mysite #mysite 디렉토리 생성
  2. 개발 서버 작동 확인: cd mysite # mysite 디렉토리
    python manage.py runserver # ./manage.py runserver도 됨
  3. 앱 만들기:python manage.py startapp polls # polls 라는 앱 생성
  4. 프로젝트에 내 app 등록하기: settings.py 에 INSTALLED_APPS = [] 안에 'polls.apps.PollsConfig라는 것을 넣는 것을 통해 Django에 poll 앱이 포함됐다는 사실을 알 게 될수있다.
  5. view 작성하기: view.py에
from django.http import HttpResponse #어디 sys에 있겠지...?

def index(request):
		return HttpResponse("Hello, world. You're at the polls index.")

라는 코드를 넣어주면서 index라는 페이지에 접근하면 우리는 위와 같은 문구가 표출 된 것을 보게 될 수있다. 또한 뷰를 호출하기 위해서는 이와 연결된 URL이 있어야 한다.
6.URL 연결하기: ### 앱 경로에 url 생성하기

뷰를 호출하려면 ← 이와 연결된 URL이 있어야 함 ← 이를 위해 URLconf가 사용됨 ← polls 디렉토리에서 URLconf를 생성하려면 urls.py 파일 생성해야함 (vim urls.py)

즉, view에 맞는 각각의 url이 있어야하고, 그 url은 polls/urls.py 에서 만든다!

from django.urls import path # 이것도 어디 sys에 django.http랑 같이 있겠지...?
from . import views # 같은 디렉토리에 있는 views.py 파일을 불러옴.

urlpatterns = [
	path('', views.index, name='index'), # view.py 안에 내가 만들어둔 index라는 함수를 데려왔네
]

또한 mysite에서 polls.urls.py를 include()하여 polls.urls내부에 있는 index뷰가 URLconf에 연결 되도록 한다.

##mysite/urls.py 안에 아래와 같은 코드를 삽입
from django.contrib import admin
from django.urls import include, path

urlpatterns = [
    path('polls/', include('polls.urls')), # mysite.urls.py에다 polls.urls.py를 include
    path('admin/', admin.site.urls),
]
  1. 서버에서 확인해보기: python manage.py runserver # 서버가 구동되면서 아래와 같은 화면이 뜨면 성공이다.

  2. 데이터베이스 생성하기: migrate 명령어를 통해 settings.py 내부에 있는 INSTALLED.APPS를 보고 필요한 데이터 베이스를 생성하거나, 수정사항을 저장하는 역할을 한다. 즉, 이 명령을 실행한 후라면, 필요한 데이터 베이스의 기본 구조가 만들어졌다고 이해하면 된다.

./manage.py migrate
  1. Model 만들기: 모델은 개발자가 저장하는 데이터의 필수적인 필드들과 동작들을 갖고 있다. 이 설문조사 app에는 크게 두 모델을 포함 시킨다. Question 과 Choice 이다. 각 모델은 클래스 형태로 표현하면 된다.
import datetime

from django.db import models
from django.utils import timezone

class Question(models.Model):
	question_text = models.CharField(max_length=200)
	pub_date = models.DateTimeField('date published')

	def __str__(self):
		return self.question_text

	def was_published_recently(self):
		return self.pub_date >= timezone.now() - datetime.timedelta(days=1)

class Choice(models.Model):
	question = models.ForeignKey(Question, on_delete=models.CASCADE)
	choice_text = models.CharField(max_length=200)
	votes = models.IntegerField(default=0)

	def __str__(self):
		return self.choice_text
  1. 모델 활성화하기: 활성화를 시키기 전에 makemigrations 라는 명령어를 통해 내가 모델을 변경시킨 사실과 변경사항을 migration으로 저장시키고 싶다는 것을 Django에게 알려줘야 한다.
python manage.py makemigrations polls

성공 했다고 뜨면 다음에는 migrate 명령어를 통해 데이터베이스에 모델과 관련된 테이블을 생성시킨다.

python manage.py migrate
profile
행복한 프론트엔드 개발자

0개의 댓글