21.2.23

커피 내리는 그냥 사람·2021년 2월 23일
0

위코드 pre코스

목록 보기
16/28

<Django 세션 중요 사항 정리>

라이브러리 vs 프레임워크 :

라 : 책들이 모여있다-> 코드가 모여있다. 패키지화 되어 있다. 그걸 내가 활용할 수 있다 (코드가 모여 있는 작은 개념)
프 : 더 큰 개념. 요리사가 요리할 수 있는 주방(환경)에 도구들을 이용해 요리만.. 즉 개발자는 개발 도구를 이용해서 개발하는 것.

Django란? : '웹' 프레임워크.

M V T : template는 제외

  • model : 모델링 ; 그냥 그림일 뿐인걸 구체화 시키는 과정 with 데이터 베이스
    "모델 - ORM - 데이터베이스"(중간다리)
    데이터 베이스의 테이블 하나 하나가 파이썬 '클래스'

  • view(url.py에서 받은 것 로직 처리, 파이썬 클래스 메소드)

  • URLconf :
    (요청) 로그인, 회원가입 등 에 따라 온 객체(request) 처리 코드가 담긴 것, 그 요청 판단 후 view에다 보내줌.


그 외 필요 개념

  • (미니콘다 등) 가상환경이란? : 본인 혼자쓰는 컴이 아니다. 혹은 프로젝트가 여러 개다
    -> 가상환경을 쓰면 종합할 수 있다, 여러 가상환경 만들 수 있다. (activate 시킨다.) 즉 본 종이가 아니라 여러 종이들을 만들어서 거기서 작업하는 것.

  • 앱 : 회원가입, 구입, 카테고리... 등의 "디렉토리" ; 보통 복수형으로 디렉토리 이름 짓는게 편함.

Django pt1, pt2 튜토리얼 진행

가상 환경 설정

  1. mysql :

    The server quit without updating PID file : mysql이 이미 돌고 있었음
    ->mysql -u root -p 이후 비밀번호

  2. 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로 다시 해보니 잘 됨.)

  1. 가상 환경에 장고 설치 :

    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." 띄우기.

  1. 프로젝트 파일 살펴보기
    mysite/
    manage.py : 사이트 관리(웹서버 시작)
    mysite/
    __init__.py
    settings.py : 웹사이트 설정
    urls.py : 사이트 목차
    asgi.py
    wsgi.py : WSGI 호환웹서버 진입점

  2. 프로젝트 동작 확인(서버 잘 되는지?)

python manage.py runserver

여기서 http://127.0.0.1:8000을 복사해서 들어가면 로켓 이륙 화면이 나옴 : 성공.

여기까지가 설문조사 앱 만드는 준비 과정.
3. 설문조사 앱 디렉토리 준비 : manage.py가 존재하는 디렉토리(상위 mysite)에 만들기 ; 앱 준비 완료.

python manage.py startapp polls
  1. 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 활용, 관리자 사이트 접근하기

  1. 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이야기 하는 것)

  1. 모델 만들기 : 실습(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에서 지정한 이름으로 볼 수 있다.

  1. API 가지고 놀기 : 파이썬 쉘에서 필요한 부분을 입력하여 API를 완성시킨다. 이 때 중간 중간 Q, C 모델 파일을 수정해준다.(객체 표현 때문에)

  2. 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
  1. 테이블에 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 :
  1. get : 1개의 object를 가져 옴 - log in 시 유효(한 유저꺼니까, 1개가 무조건 있어야 함.)
    클래스.objects.get(00 = "00") ; 값이 가져와짐

  2. all : 다 가져오는 것 ; Queryset type을 반환해준다.(객체가 오는게 아님) ; 실제 파이썬 리스트가 아니다. 근데 인덱스로 접근이 가능하다.

  3. (자주 씀) filter : 클래스.objects.filter(00="00")

  • 없는 애 찾으면 그냥 빈칸으로 쿼리셋이 나옴
  • 동시에 여러 조건을 걸 수 있다.

"One to many" 가져오기
id값밖에 없는데? : foreign key
d1.user(포린키가 연결된 객체)

profile
커피 내리고 향 맡는거 좋아해요. 이것 저것 공부합니다.

0개의 댓글