본문 바로가기
관리자

Programming-[Backend]/Django

Django로 Pinterest 따라 만들기-1.프로젝트 생성 및 세팅, 기본 구조 만들어보기

728x90
반응형

인프런 강의를 정리하는 글이다. 인스타그램처럼 이미지를 보여주고, 사용자들과 소통할 수 있는 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' 명령어를 통해할 수 있다.

프로젝트 생성화면

 

Terminal에서 pip 명령어 입력


'cd..'를 입력하여 샘플로 만들었던 프로젝트의 상위로 올라가서, 'django-admin'이라는 명령어를 입력해보면 django에서 지원하는 명령어를 확인할 수 있다. 새로운 프로젝트를 만들기 위해서 'django-admin startproject {프로젝트이름}' 을 입력하여 프로젝트를 생성하고, 다시 생성된 프로젝트를 open 한다.

django-admin 명령어 입력 시 출력된 기본 명령어 리스트


다음으로 가상환경 설정을 위해서 [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 대신 특정 문법을 사용하여 동적인 데이터 매핑 및 기능이 작동하도록 해준다.

참조 2의 그림

 


 

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



728x90
반응형