2022-02-14
"Django"
복습을 진행해보자
web client(browser)에서 ----> request를 보낸다 치자
request 방식(4가지)
- 2가지 방식만 알아 보도록 하자
- GET 방식
- POST 방식
✍ GET 방식
- GET으로 request를 보내면 데이터가 query string 형태로 request에 붙어서 나간다.
- 즉 GET 방식은 전달하는 데이터가 query string(?변수=값)형식이다.
✍ POST 방식
- POST 방식은 request를 보낼때 request 헤더 내에 내가 전달한 데이터를 포함시켜서 보낸다.
- POST 방식은 딱 하나만 정해져 있다.
아무튼 이 과정에서 request를 보내면 이 request를 분석하는 놈이 받는데 그녀석이 바로 [ URLConf ]이다.(python module로 존재한다)
URLConf ------> View
- URLConf가 web client의 request를 처리할 수 있는 함수를 view로부터 호출한다.
- view(python module)는 함수의 집합이다.
- 여기서 만약 db를 처리해야한다 하면
View -----> model
- model(class의 집합) [ python module]
- python module은 파일임
- model은 db와 연동을 하게 된다.
- model은 db를 ORM을 통해 연동을 하게 된다.
- 이 ORM 연동은 장고가 알아서 해준다!
- 어쨌든 View가 데이터베이스를 이용하려면 model을 이용해야 한다.
결과를 얻으면 View가 결과를 리턴해줘야하는데 이때 view가 기존에 만들어 놓은 html을 이용한다.
- 그게바로 template이다.
이 template이 바로 우리가 알고있는 html이다. ( 형태만 잡혀있는 html )
- 즉 view에서 나오는 결과데이터 + template에 있는 html을 합쳐서 view가 client에게 response 해준다!
이 과정을 Django의 MVT pattern이라 한다!
예제
Django를 사용해보도록 하자!
- 다음과 같이 테이블을 구성할 것이다.
- 저번과 실행과정은 똑같다
- anaconda를 실행후 가상환경을 설정해 준다
- python manage.py startapp polls로 파일하나를 만들어준다.
- polls 폴더가 생성 즉 우리가 만들 어플리케이션은 파일로 생성이 되는것을 알 수 있음
- setting 파일로가서 파일 setting을 진행
ALLOWED_HOSTS = ['127.0.0.1','localhost'] # allowed_host를 로컬 호스트로 설정해 준다.
- installed apps에 polls라는 어플리케이션을 추가해줘야함
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'polls.apps.PollsConfig' # 이렇게 polls파일 안에 생성된 apps.py이 파일안에 클래스 명으로 지정된 PollsConfig를 가져와준다. ]
- database를 mysql로 설정해줘야함
# DATABASES = { # 'default': { # 'ENGINE': 'django.db.backends.sqlite3', # 'NAME': BASE_DIR / 'db.sqlite3', # } # } # 초기에는 sqlite3로 설정되어있다. mysql을 사용하기위해 # mysql 데이터베이스명, 사용자이름, 비밀번호와 호스트ip 그리고 포트번호를 기재해준다 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'mysite_0214db', 'USER': 'root', 'PASSWORD': 'test123', 'HOST': '127.0.0.1', 'PORT': '3306' } }
- time_zone을 우리나라 시간으로 설정해준다.
TIME_ZONE = 'Asia/Seoul'
- 여기까지 완료했으면 명세서를 통해 특정 이름의 테이블을 만들어준다
- migrate명령어를 이용하면 명세서를 기반으로 실제 데이터를 처리해라 라는 의미를 가진다.
- 가상환경에 mysqlclient를 설치해 줘야한다.
C:\python-django\MyFirstWeb_0214>pip install mysqlclient
- migrate를 사용해 데이터 처리
C:\python-django\MyFirstWeb_0214>python manage.py migrate
- admin 페이지를 설정해준다
C:\python-django\MyFirstWeb_0214>python manage.py createsuperuser username : mail : password : 이렇게 3개를 입력하게 된다 그러면 superuser가 생성이된다.
- runserver로 프로젝트를 deploy시킨다.
C:\python-django\MyFirstWeb_0214>python manage.py runserver
- 해당 명령어를 실행후 나오는 링크를 클릭하면 다음과 같은 창이 뜨게된다
- 여기까지가 기본적인 페이지를 띄우는 과정이다
- 여기에 위에 예제 그림처럼 테이블을 작성해 넣어보도록 하자
-
어플리 케이션 마다 즉 기능마다 view, tamplate, model이 다 따로따로 존재한다.
-
모델을 먼저 만들어서 데이터 베이스의 테이블을 만들도록 하자
- sql 구문을 이용하지 않고 python에서 배운 class를 통해 만들겠다는 얘기이다.
- 질문 테이블 (question table)
- id | integer(pk)
- question_text | varchar(200) => 질문내용
- pub-date | datetime => 질문생성시간
- choice table
- id | integer(pk)
- choice_texet | varchar(200)
- votes | integer => 현재까지 득표수
- question | integer(fk)
- choice table의 question이 question table의 id를 가리키게됨
이제 테이블을 만들어보자 polls가 니으 어플리케이션 폴더이다. 이 폴더안에 models.py폴더를 수정해주자.
from django.db import models # 장고가 제공해주는 특별 모듈이다. # model class를 만들때는 반드시 models.Model을 상속해야함! # 모델 class를 만들면 자동으로 PK가 하나 설정됨 # model 클래스는 id란 colum으로 Integer타입으로 AUTO_INCREMENT형태로 생성되요! class Question(models.Model): # 컬럼을 여기에다가 작성해줌 # id = models.IntegerField() # 그렇기때문에 model 클래스를 만들면 이걸 안써줘도 된다! question_text = models.CharField(max_length=200) # 이게 question_text varchar(200)이런 의미이다. pub_date = models.DateTimeField() def __str__(self): return self.question_text # 객체명이 아닌 해당 #객체가 가지고 있는 질문 항목을 출력하기 위해 사용한다. class Choice(models.Model): choice_text = models.CharField(max_length=50) vote = models.IntegerField(default=0) # default = 0은 초기에 값을 안넣어주면 0이 들어간다는 의미 question = models.ForeignKey(Question, # Question 클래스에 명시되어 있지 않지만 Question 클래스의 id를 가리킴 on_delete=models.CASCADE) # pk가 지워지면 fk도 지워라 라는 의미 def __str__(self): return self.choice_text # 실제 MySQL Database에 Table을 만들기 위해서는 # python manage.py migrate ( 명세서를 기준으로 실제 Table 생성) # model class를 기반으로 명세서를 만들어야 함 # python manage.py makemigrations ( 클래스를 기반으로 명세서를 만듬) # 잘못 만든것 같아서 새로 수정하려하면 클래스 내용을 수정 후 만들어진 명세서를 지우면된다! # 그러고 다시 makemigrations를 통해 새로 만들고 migrate를 통해 해당 데이터베이스를 다시 전송해주면된다.
- 다음과 같이 모델을 수정해주면 명세서를 만들어서 테이블로 등록을 해주면된다.
- 터미널에 다음과 같은 명령어를 입력하도록 하자
python manage.py makemigrations
python manage.py migrate
- 해당 명령어를 사용하면 polls폴더 밑에 migrations폴더가 생성되어 명세서를 만든걸 확인할 수 있고 MySQL에 연동된 데이터베이스 폴더의 테이블을 보면 polls_question, polls_choice테이블이 추가된것을 확인 할 수 있다.
- 이제 admin page에 들어와서 database 핸들링이 가능하다
- 하지만 admin page에 들어가면 만든 테이블이 없다 어떻게 해줘야하는가?
- 다시 파이참으로 돌아와 polls 폴더 안에 admin.py에 모델을 등록해줘야한다
- admin.py 레지스터 등록
from django.contrib import admin from polls.models import Question, Choice # Question과 Choice 테이블을 사용하기 위해 import시켜 경로를 가져와준다. # Register your models here. admin.site.register(Question) admin.site.register(Choice)
- 다음과 같이 입력 후 다시 관리자 페이지에 들어가보면 다음과 같이 나온다!
- 이제 Questions와 choices에 항목을 추가해보도록하자
- 전체적인 프로그램의 도식도를 파악해보자
- 기본적인 root url에서 추가적으로 경로를 탐색해서 include를 통해 해당 url(/polls/가 포함된 url을 의미)로 넘겨주면 그 url(/polls/)에서 view에게 request를 요청하여 view에서 해당 로직(index())을 실행 후 Database를 처리하여 Template를 이용해 해당 client에 response해준다. 이과정을 코드로 알아보도록하자.
Author And Source
이 문제에 관하여(2022-02-14), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@yuyoungjae/2022-02-14저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)