인프런 강의를 정리하는 글이다. 인스타그램처럼 이미지를 보여주고, 사용자들과 소통할 수 있는 SNS 서비스인 Pinterest를 따라만들면서 django 프레임워크를 학습한다. Front는 HTML, CSS, JavaScript를 사용하고, Back은 MariaDB, NGINX, django, docker를 사용한다. 마지막으로 AWS를 이용하여 배포까지 해본다.
1. 프로젝트 생성 및 설치
프로젝트 생성, 기본 세팅
pycharm IDE를 이용하여 Pure python 프로젝트를 생성한다. 만약 Pure Python이 아니라 Django로 프로젝트를 생성한다면 아래 과정을 거칠 필요가 없다. Pycharm에서 알아서 django startproject와 가상환경 설정을 해준다.
---
이 프로젝트는 django 프로젝트를 생성하기 위한 sample일 뿐이다. 이름은 아무렇게나 지어도 된다. 생성 이후 terminal에서 'pip list' 명령어를 입력해보면 django가 설치되어있지 않다. 설치는 'pip install django' 명령어를 통해할 수 있다.
'cd..'를 입력하여 샘플로 만들었던 프로젝트의 상위로 올라가서, 'django-admin'이라는 명령어를 입력해보면 django에서 지원하는 명령어를 확인할 수 있다. 새로운 프로젝트를 만들기 위해서 'django-admin startproject {프로젝트이름}' 을 입력하여 프로젝트를 생성하고, 다시 생성된 프로젝트를 open 한다.
다음으로 가상환경 설정을 위해서 [Ctrl+Alt+S]를 눌러 설정을 연다. Proejct:{프로젝트명} 메뉴에 들어가서 아래 그림에서 표시해놓은 설정 버튼을 누르고, add -> venv라는 가상환경을 추가해준다.
그리고나서 터미널을 껐다가 켜주면 (venv)가 경로에 추가된 것을 볼 수 있다.
이 프로젝트에도 django가 설치되어 있어야하므로, 'pip install django'를 한 번 더 실행하여 설치해준다.
서버 실행 테스트
이제 서버를 실행할 수 있다. 'python manage.py runserver' 명령어를 입력하여 서버를 실행해보면 localhost에서 아래 화면이 표시된다.
서버 중단은 터미널창에서 [Ctrl +C]를 누르면 된다.
2. Django의 MVT 패턴
Django는 MVC와 유사하게, MVT(Model, View, Template)패턴이 있다.
- Model : DB와 Django 객체간의 매핑을 해주는 요소이다. ORM(Object Relational Mapping)에서의 엔티티 개념이라고 보면 된다.
- View : Server에서 처리하는 Service단이다. 인증, 검증, 로직진행, DB 저장 등의 비즈니스 로직을 처리하는 영역이다.
- Template : 사용자에게 표시해주는 UI단이다. 정적인 HTML, CSS 대신 특정 문법을 사용하여 동적인 데이터 매핑 및 기능이 작동하도록 해준다.
3. 기본 모듈 만들어보기
Pinterest 서비스를 만들기 위해서 Account, Article, Project, Comment와 같은 모듈들을 만들 것이다. 맨 처음 Account를 만들면서 django의 프로젝트 구조를 어떻게 만드는지 학습해본다.
Accountapp 생성
'python manage.py startapp accountapp' 명령어를 입력하여 account python package를 생성할 수 있다. 이렇게 하면 기본적으로 필요한 admin, model, view등을 만들어준다.
이후 accountapp을 메인이 되는 pragmatic/settings.py에 추가해주어야 app끼리 연결이 된다. settings.py의 INSTALLED_APPS에 'accountapp'을 추가해주자.
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'accountapp',
]
account/views.py 작성
account의 view.py에 테스트용으로 HttpResponse를 돌려주는 기능을 넣는다.
def hello_world(request):
return HttpResponse('Hello world!')
참고로 Pycharm에서는 HttpResponse라는 문자열을 입력한 뒤, [Alt + Enter]를 입력하면 import 경로를 자동으로 추천해준다.
URL 연결: Routing
어떤 url로 요청이 들어왔을 때 account.app의 기능을 실행할지를 메인 프로젝트인 pragmatic에서 정의한다.
pragmatic/urls.py에 'account/' 패턴을 추가한다. path 뒤에는 반드시 슬래시(/)를 넣어주어야 한다. include는 import 해오는 패키지이며, 'accountapp.urls'로 두어 accountapp 내부의 urls.py 내부에서 정의할 url에 접근 시 처리되도록 설정해준다.
urlpatterns = [
path('admin/', admin.site.urls),
path('accounts/', include('accountapp.urls'))
]
accountapp/urls.py를 생성하고, 아래 코드를 작성한다. accounts/hello_world에 접근하면 view에서 정의한 hello_world 메서드로 요청이 가서 처리되는 구조이다.
from django.urls import path
from accountapp.views import hello_world
app_name = 'accountapp'
urlpatterns = [
path('hello_world/', hello_world, name='hello_world')
]
urlpatterns의 path의 인자는 차례대로 경로, 메서드, 이름이다.
app_name을 다시 지정한 것은 접근의 편의성을 위한 것이다. 원래 해당 url로 접근하기 위해서는 '127.0.0.1:8080/accounts/hello_world'로 접근해야되지만, app_name을 지정해주면 나중에 accountapp:hello_world라고만 작성해도 접근이 가능해진다.
이제 'python manage.py runserver' 명령어를 입력 후, localhost:8000/account/hello_world로 접근하면 response가 제대로 반영되는 것을 확인할 수 있다.
참조
1. 작정하고 장고! Django로 Pinterest 따라만들기 : 바닥부터 배포까지-박형석님 인프런 강의
https://www.inflearn.com/course/%EC%9E%A5%EA%B3%A0-%ED%95%80%ED%84%B0%EB%A0%88%EC%8A%A4%ED%8A%B8/dashboard
2. _rian 블로그 : Django MVT 패턴이란
https://butter-shower.tistory.com/49
'Programming-[Backend] > Django' 카테고리의 다른 글
Django로 Pinterest 따라 만들기-6. BootStrap 추가, DetailView 구현 (0) | 2022.06.08 |
---|---|
Django로 Pinterest 따라 만들기-5. AccountApp : CBV, CreateView, Login, reverse_lazy (0) | 2022.06.08 |
Django로 Pinterest 따라 만들기-4. Model 생성, HTTP 통신 연습, Run Configuration 설정 (0) | 2022.06.07 |
Django로 Pinterest 따라 만들기-3. static, CSS 설정 (0) | 2022.06.07 |
Django로 Pinterest 따라 만들기-2.git 관리, HTML 구조 생성(include, extends, block) (0) | 2022.06.06 |