-
django.2 튜토리얼Django 2020. 11. 24. 17:15728x90
장고 버전 확인
Part.1 프로젝트(project) 만들기
하나의 프로젝트(project) 란?
보통 하나의 웹 사이트를 말한다. 한 프로젝트(웹 사이트) 안에는 다양한 기능들이 있는데, 그 기능을 앱 (app)으로 관리한다
ex) '네이버'라는 프로젝트에 '블로그' 라는 앱이 있음.
이렇게 만들어진 앱은 다른 프로젝트에서도 활용할 수 있다.
프로젝트를 만들 디렉토리 경로를 지정한다.
아래와 같은 경로에 내 프로젝트 디렉토리를 만들기위해 아래 경로로 이동하고
mysite 라는 디렉토리를 생성한다
mysite 내부를 살펴본다면
#mysite 내부를 한 번 볼까? mysite/ # -> 나중에 firstsite로 바꿨음. manage.py mysite/ __init__.py settings.py urls.py asgi.py wsgi.py
outer mysite : a container for my project. 이름 마음대로 바꿔도 됨. firstsite 로 바꿈.
manage.py : Django 프로젝트와 다양한 방법으로 상호작용하는 커맨드라인의 유틸리티
mysite/ : 프로젝트를 위한 실제 python 패키지들이 저장됨.
__init__.py : .. init... python에게 이 디렉토리를 패키지처럼 다루라고 알려주는 용도의 단순한 빈 파일.≠
settings.py : 현재 Django 프로젝트의 환경 및 구성을 저장함.
urls.py : 현재 Django project의 URL 선언을 저장.
Django로 작성된 사이트의 목차라고도 할 수 있음.
settings.py 안에 있는 ROOT_URLCONF에 settings/url.py에 하겠다고 선언해두었기 때문.
asgi.py : 현재 프로젝트를 지원하기 위한 ASGI 호환 웹 서버의 진입점(entry-point).
(django는 비동기를 지원하지 않았기에, 해당 기능을 사용하고자 할 때 사용)
wsgi.py : 현재 프로젝트를 서비스하기 위한 WSGI 호환 웹 서버의 진입점.
- 웹 서버 게이트웨이 인터페이스 (django를 사용하지 않고 파이썬으로 사용하게 되면 직접 설정해줘야 함.
- 두 파일이 있어야 web server로서 동작할 수 있음.
개발 서버 작동 확인하는 방법
cd mysite # mysite 디렉토리 python manage.py runserver # ./manage.py runserver도 됨
서버를 활성화한 뒤
아래 주소에 접속하여 아래와 같은 이미지가 나오면 정상이다
http://127.0.0.1:8000/
Part.2 앱 만들기
mysite 라는 웹사이트 내부에 polls 라는 설문조사 앱을 만들어보자
# 우선은 연습이니까, 최상위에서, 곧 바로 임포트 할 수 있도록 manage.py 바로 옆에다 python manage.py startapp polls # polls 라는 앱 생성 # polls 구조 한 번 볼까? polls/ __init__.py admin.py apps.py migrations/ __init__.py models.py tests.py views.py
앱의 첫번째 뼈대가 완성되었다 지금부터 해야할 작업은 아래와 같다.
- Project에 내 app 등록하기
- 뷰 작성하기
- URL 연결하기
- 데이터베이스 만들기
- 모델 만들기 + 데이터베이스에 연결하기
Project에 내 app 등록하기
현재 프로젝트에게 polls 앱이 설치되어 있다는 것을 알려줘야 한다.
앱의 구성 클래스(Config) 경로를 프로젝트의 세팅 파일에 입력해주면 된다.
먼저 setting.py 가 있는 경로로 위치해 주자.
리눅스의 vi 에디터로 접근하여 해당 파일을 수정할 수 있게 해주는 vi 명령어를 이용하여
setting.py 의 값을 수정해줘야한다.
vi 로 setting.py에 접근하면 아래 이미지가 나오는데,
처음 polls라는 앱을 만들어줄때 자동으로 생성되는 파일이다.
(__init__, admin, apps, models. tests, views .py 는 모두 자동으로 생성되는 파일이다.
후에 나오게될 urls.py는 자동으로 생성되지 않는다.)
위의 APPS 하위에 있는
'polls.apps.PollsConfig' 을 입력하여 저장함으로써 이제 django가 polls 라는 앱이 포함되었다는 사실을 알게 된다.
여기서 config 모듈의 네이밍(naming)은 앱이름+'Config' 이며,
앱의 제일 앞 글자만 대문자로 작성된다.
만약, 앱 이름을 polls 가 아닌 app_with_underbar 라고 정하면 어떻게 될까? 그때는 'AppWithUnderbarConfig'가 된다.
* 해당 과제를 진행할때는 'polls' 만 적어도 실행이 가능하다고 한다.
View (뷰) 작성하기
첫번째 뷰를 작성해보자.
polls 파일 경로에 위치하여 view.py를 vi 명령어로 열어 아래와 같은 파이썬 코드를 입력해보자.
맨 첫줄은 건드리지말고
그 다음 줄부터 작성하도록 하자.
상기 이미지는 django 에서 가장 간단한 형태의 뷰이다.
뷰를 호출하기 위해선 이와 연결된 URL이 있어야하는데 이를 위해 URLconf가 사용된다.
그럼 URLconf를 생성하려면 어떻게 해야할까
polls 디렉토리에서 URLconf를 생성하기 위해 polls 디렉토리에서 url.py라는 파일을 생성해야 한다.
touch 명령어를 이용해 urls.py라는 0 byte 짜리 파일을 일단은 생성하고 수정하는 방식으로 진행하기 위해
touch 명령어로 urls.py를 만들었다.
여기까지 작성하였을때 아래와 같은 관계를 갖는다.
polls/ __init__.py admin.py apps.py migrations/ __init__.py models.py tests.py urls.py views.py
url 연결하기
생성하였던 urls.py를 아래 코드로 추가해준다.
다음 단계는, 최상위 URLconf 에서 polls.urls 모듈을 바라보게 설정한다.
mysite/urls.py 파일을 열고, django.urls.include를 import 하고, urlpatterns 리스트에 include() 함수를 다음과 같이 추가합니다.
# 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), ]
여기까지 작성 후
manage.py 가 있는 경로에 위치하여 서버를 실행시켜주고
http://localhost:8000/polls/ 에서 결과를 확인해보자
만약 http://127.0.0.1:8000/만 입력할 경우 아래와 같은 화면이 나오는게 정상이다
/ 뒤에 아무것도 없는 상태로
아래와 같이 urls.py 에서 / 뒤 아무것도 없는(?) 최상위단계(?) 를 지정해주지 않았기 때문이다.
# 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), ]
http://127.0.0.1:8000/admin
admin을 입력할 경우 urlpatterns에 admin이 지정되어 있기때문에 아래와 같은 화면이 나온다.
(admin은 기본적으로 적용되는 경우가 있는듯하다.)
View.py 와 url.py 를 자세히 보자
두개 다 상위 디렉토리인 polls 안에 있는 파일이다.
urls.py
# 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), ]
urls.py
# polly/urls.py from django.urls import path from . import views urlpatterns = [ path('', views.index, name='index'), ]
view.py
# polls/ view.py from django.http import HttpResponse def index(request): return HttpResponse("Hello, world. You're at the polls index.")
urlpatterns 은 함수로서
url 첫번째 글자(문자,숫자)? 처음에 polls 로 오는 경우 polls.urls.py를 포함(연결)하는 의미이며
polls/ 뒤에 빈문자열''이 올 경우 인덱스 정보로 넘어올 경우 인덱스 요청으로 온 view.py 내용을 실행한다?
뜻으로 일단 이해하자
URLconf 는 어떠한 요청이 들어올때 각 영역?에 맞는 요청을 view에게 전달해주게 되는 역할을 한다
(마치 은행내에서 청원경찰 과 같이 내가 원하는 업무에 따라 번호표를 뽑도록 도와주는 그런 역할로 생각된다.)
간략히 생각해보면 urlconf 에서 인덱스에 대한 요청이 들어오면 그에 대한 반응으로 "Hello. ...") 실행이되고
뷰의 코드를 보면 HttpResponse // 요청을 주고 받을때 사용하는 것으로 예상된다.
후에 더 자세히 다뤄보도록 하자
Database 만들기
Django를 설치하면 기본적으로 SQLite를 설치하도록 구성되어있다. 여기서는 기본 구성으로 진행한다.
현재까지 아래와 같은 디렉토리 관계를 갖는다.
. mysite db.sqlite3 manage.py mysite __init__.py __pycache__ asgi.py settings.py urls.py wsgi.py polls __init__.py __pycache__ admin.py apps.py migrations __init__.py __pycache__ models.py tests.py urls.py views.py
manage.py가 있는 mysite 경로에서
현재 mac에는 item에 python 2.9 v 이 자동으로 설치가 되어있는것 같다
따라서 python3로 입력하지 않으면 에러가 발생한다
python3 manage.py migrate
위와 같이 이미 migrate를 한 상태라면 아래와 같이 뜬다.
migrate 명령어는
/mysite/settings.py 파일 내부에 있는 INSTALLED_APPS 를 보고 필요한 데이터 베이스를 생성하거나,
수정사항을 저장하는 역할을 한다.
즉, 이 명령을 실행한 후라면, 필요한 데이터 베이스의 기본 구조가 만들어졌다고 이해하면 된다.
Module 만들기
모델은 개발자가 저장하는 데이터의 필수적인 필드들 과 동작들을 갖고 있다.
이 설문조사 polls app 에는 크게 두 모델을 포함시킬 것인데, Question 과 Choice 이다. 각 모델은 클래스 형태로 표현하면 된다.
import datetime # datetime 이라는 모듈 from django.db import models # django.db 모듈의 models함수? 임포트 from django.utils import timezone # django.utils 모듈의 timezone 함수 임포트 class Question(models.Model): # models.Model를 인자로 받아오는 Q클래스 생성 question_text = models.CharField(max_length=200) # models 라는 객체에 CharField 라는 메서드를 이용해 Q_text 변수에 할당 # CharField의 속성을 이용해 최대 길이 200자로 제한 pub_date = models.DateTimeField('date published') # models 라는 객체에 DateTimeField 라는 메서드를 이용해 p_date 변수에 할당 # date를 공개한다? 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
모듈을 위와같이 만들고나서 활성화 작업을 꼭 해줘야한다
Module 활성화하기
활성화 하기 전 해야하는 것 makemigrations 라는 명령어로 내가 모델을 변경시킨 사실 (또는 생성했다는 사실)과 이 변경사항을 migration으로 저장시키고 싶다는 것을 Django에게 알려주는 것이다.
python3 manage.py makemigrations polls
그 다음은 migrate 명령어로 데이터베이스에 모델과 관련된 테이블을 생성하는 것이다.
python3 manage.py migrate
아래와 같이 뜨면 성공이다
728x90'Django' 카테고리의 다른 글
wecode_CRUD_1 과제 (0) 2020.11.28 django.6 가상환경 내에서 data 집어넣기 (0) 2020.11.28 django.4 스타벅스 모델링 과제_wecode (0) 2020.11.26 django.3 미니콘다 가상환경 설정 및 CRUD_1 (0) 2020.11.25 Djange.1 Django 기초 (0) 2020.11.23