21.2.23
<Django 세션 중요 사항 정리>
라이브러리 vs 프레임워크 :
라 : 책들이 모여있다-> 코드가 모여있다. 패키지화 되어 있다. 그걸 내가 활용할 수 있다 (코드가 모여 있는 작은 개념)
프 : 더 큰 개념. 요리사가 요리할 수 있는 주방(환경)에 도구들을 이용해 요리만.. 즉 개발자는 개발 도구를 이용해서 개발하는 것.
Django란? : '웹' 프레임워크.
M V T : template는 제외
-
model : 모델링 ; 그냥 그림일 뿐인걸 구체화 시키는 과정 with 데이터 베이스
"모델 - ORM - 데이터베이스"(중간다리)
데이터 베이스의 테이블 하나 하나가 파이썬 '클래스' -
view(url.py에서 받은 것 로직 처리, 파이썬 클래스 메소드)
-
URLconf :
(요청) 로그인, 회원가입 등 에 따라 온 객체(request) 처리 코드가 담긴 것, 그 요청 판단 후 view에다 보내줌.
그 외 필요 개념
-
(미니콘다 등) 가상환경이란? : 본인 혼자쓰는 컴이 아니다. 혹은 프로젝트가 여러 개다
-> 가상환경을 쓰면 종합할 수 있다, 여러 가상환경 만들 수 있다. (activate 시킨다.) 즉 본 종이가 아니라 여러 종이들을 만들어서 거기서 작업하는 것. -
앱 : 회원가입, 구입, 카테고리... 등의 "디렉토리" ; 보통 복수형으로 디렉토리 이름 짓는게 편함.
Django pt1, pt2 튜토리얼 진행
가상 환경 설정
-
mysql :
The server quit without updating PID file : mysql이 이미 돌고 있었음
->mysql -u root -p 이후 비밀번호 -
conda :
conda list : command not found: conda ; route설정 오류
-> export PATH=~/miniconda3/bin:$PATH
(이후) conda env list -> conda create -n "가상환경이름" python=3.7
-> source activate "가상환경이름"(리눅스 계열 환경에서는 안 되면 이거 쓰기. 이후 conda로 다시 해보니 잘 됨.)
- 가상 환경에 장고 설치 :
pip install django -> python -m django --version 확인까지
- 이후 프로젝트 스타트 ; 이름에 장고, 파이썬 등 쓰지 말기.
django-admin startproject mysite
장고 튜토리얼 pt1 ~ pt2
참고 자료 :
https://docs.djangoproject.com/ko/3.1/intro/tutorial01/
https://tutorial.djangogirls.org/ko/django_start_project/
pt1 : "Hello, world. You're at the polls index." 띄우기.
-
프로젝트 파일 살펴보기
mysite/
manage.py : 사이트 관리(웹서버 시작)
mysite/
__init__
.py
settings.py : 웹사이트 설정
urls.py : 사이트 목차
asgi.py
wsgi.py : WSGI 호환웹서버 진입점 -
프로젝트 동작 확인(서버 잘 되는지?)
python manage.py runserver
여기서 http://127.0.0.1:8000을 복사해서 들어가면 로켓 이륙 화면이 나옴 : 성공.
여기까지가 설문조사 앱 만드는 준비 과정.
3. 설문조사 앱 디렉토리 준비 : manage.py가 존재하는 디렉토리(상위 mysite)에 만들기 ; 앱 준비 완료.
python manage.py startapp polls
- polls / views.py에 코드 입력하여 홈페이지에서 띄울 문구를 임포트. 이후 polls / urls.py 만든 후 코드 입력
- 위 코드를 띄우는 이유 : urls가 request를 받았을 때 view의 결과물을 보고 응답할지 안 할지 결정해야하기 때문에.
mysite/urls.py
from django.contrib import admin
from django.urls import include, path
urlpatterns = [
path('polls/', include('polls.urls')),
path('admin/', admin.site.urls),
]
- 여기서 import한 것이 include인 이유 :
include() 함수는 다른 URLconf들을 참조할 수 있도록 도와줍니다. Django가 함수 include()를 만나게 되면, URL의 그 시점까지 일치하는 부분을 잘라내고, 남은 문자열 부분을 후속 처리를 위해 include 된 URLconf로 전달합니다.
다른 URL 패턴을 포함할 때 항상 사용해야 한다. 단 admin.site.urls가 유일한 예외
- 여기서 사용한 path의 인수
(다 사용한 것은 아님. 있는 인수들에 대한 설명)
route : url패턴을 가진 문자열
view : Django 에서 일치하는 패턴을 찾으면, HttpRequest 객체를 첫번째 인수로 하고, 경로로 부터 〈캡처된〉 값을 키워드 인수로하여 특정한 view 함수를 호출(?)
kwargs : 임의의 키워드 인수들은 목표한 view 에 사전형으로 전달(?)
name : URL 에 이름을 지으면, 템플릿을 포함한 Django 어디에서나 명확하게 참조할 수 있다.
추가로 설명 및 공부가 필요한 부분(이해 못 한 부분)
: urls와 views가 실제로 어떻게 연결되는지? 그리고 path 인수에 대한 설명
pt2 : 데이터베이스 설치, 첫 모델 구성, API 활용, 관리자 사이트 접근하기
- mysite > settings.py 튜토리얼대로 변경해보기
- SQLlite 사용(특별히 설정 변경한 것 없이 진행)
- TIME_ZONE = 'Asia/Seoul'로 설정
- INSTALLED_APPS 구성 : 큼지막한 단위로 앱을 나눠 놓은 것. 앱 생성 및 변동에 대해 settings.py가 인지해야 하는 탭이므로 중요.
django.contrib.admin – 관리용 사이트.
django.contrib.auth – 인증 시스템.
django.contrib.contenttypes – 컨텐츠 타입을 위한 프레임워크.
django.contrib.sessions – 세션 프레임워크.
django.contrib.messages – 메세징 프레임워크.
django.contrib.staticfiles – 정적 파일을 관리하는 프레임워크.
기본적으로 주어지는 것들에 대해 필요 없다면 주석처리 혹은 삭제 후 사용하면 된다.
이후 변경사항을 저장하기 위해서는
$ python manage.py migrate
해주면 된다.
ROOT_URLCONF = 프로젝트.urls(urls.py이야기 하는 것)
- 모델 만들기 : 실습(Question, Choice)
- 먼저 polls / models.py에 Question, Choice에 대한 클래스를 만든 뒤(여기서 클래스란 데이터 테이블, 00=~ 형태는 테이블의 컬럼이 됨. 즉 목차.)
- Question과 Choice의 관계 : one-to-one(by Database)
- Setting.py에서 Q와 C 객체가 접근하기 위한 API를 INSTALLED_APPS에 넣기 -> Django가 polls 앱이 포함된 것을 인지.
모델 변경(데이터베이스가 파이썬의 말을 알아듣게 ORM을 거치는 "조립")
$ python manage.py makemigrations polls
SQL문을 확인하고 싶을 땐? : 여기서 만들어진 파일을 스키마라고 한다. 그리고 이 스키마는 파일의 변천사를 의미하며 일종의 버전 컨트롤이라고 볼 수 있다.
$ python manage.py sqlmigrate polls 0001
이 스키마를 동기화(데이터베이스에 밀어넣기) : $ python manage.py migrate
위 과정 정리(조립과 밀어넣기)
- (models.py 에서) 모델을 변경합니다.
- python manage.py makemigrations을 통해 이 변경사항에 대한 마이그레이션을 만드세요.
- python manage.py migrate 명령을 통해 변경사항을 데이터베이스에 적용하세요.
완성된 것은 앱이름_클래스 명으로 완성되는데 class Meta: db.table = "소문자 복수 형태"를 하면 mysql에서 지정한 이름으로 볼 수 있다.
-
API 가지고 놀기 : 파이썬 쉘에서 필요한 부분을 입력하여 API를 완성시킨다. 이 때 중간 중간 Q, C 모델 파일을 수정해준다.(객체 표현 때문에)
-
Django 관리자 소개 : 관리용 인터페이스
관리자 생성 :
python manage.py createsuperuser
- 이름, 이메일, 비밀번호 입력하면 생성 됨.
- 개발 서버 열어보기 : python manage.py runserver 이후 url에 /admin 으로 입력하면 관리자 화면 로그인 창 나옴.
-> 관리자 사이트에서 poll 앱 변경할 수 있도록 권한 주기 후 변경(polls/admin.py)
여기까지 뜨면 pt2 끝.
여기서 해결할 문제 : 1~3 과정에 대한 전반적인 이해 필요. 전체적인 개념이 이해가 안 됨.
-> 이후 CRUD 과제 통해 과정 이해할 것.
CRUD 중 C, R 정리
% python manage.py shell : 장고 기능 포함한 shell 이용
C
- 테이블에 row 만들기 : 동시에 데이터베이스에 담기는데 얘를 변수에 담을 수 있다. 즉 한 줄이 다 담긴다.)
-
어떤 테이블에 쓸까? : from (앱.models) import class명
-
어떻게 쓸까? : 클래스명.objects.create(00='00', 11='11'.....) keyword argument로 들어감 오타 주의
엔터 치면 객체 id 1이 하나 생겼다. -
one-to-many 예시 :
만일 연결해야 할 값이랑 forein-key id를 create해야할 때 : 처음 만든 table에 변수를 써주면 됨
(u1 ; 그러면 알아서 id를 부여해 줌) ; 그래서 변수(객체) 다 설정해야 한다.
변수.값 >>> 바로 나옴
R :
-
get : 1개의 object를 가져 옴 - log in 시 유효(한 유저꺼니까, 1개가 무조건 있어야 함.)
클래스.objects.get(00 = "00") ; 값이 가져와짐 -
all : 다 가져오는 것 ; Queryset type을 반환해준다.(객체가 오는게 아님) ; 실제 파이썬 리스트가 아니다. 근데 인덱스로 접근이 가능하다.
-
(자주 씀) filter : 클래스.objects.filter(00="00")
- 없는 애 찾으면 그냥 빈칸으로 쿼리셋이 나옴
- 동시에 여러 조건을 걸 수 있다.
"One to many" 가져오기
id값밖에 없는데? : foreign key
d1.user(포린키가 연결된 객체)
Author And Source
이 문제에 관하여(21.2.23), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@sinichy7/21.2.23장고-수정중저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)