Django

django.8 Django Project 와 App 이해

codermun 2020. 11. 28. 22:55
728x90
반응형

Django - Project 

장고에서 프로젝트라는 개념이 있다.

프로젝트는 하나의 큰 웹사이트로 생각하면 된다.

마치 장고 프로젝트를 하나 생성하면 웹페이즈를 한개 만든다고 생각하는 것과 같다.


Django - App

프로젝트 안은 여러개의 앱(App)들이 존재한다.

여기서 앱이란 프로젝트라는 하나의 웹 페이지 안에서 관리자앱, 인증앱, 게시판앱, 뉴스피드앱 등등

관리자앱과 같이 하나의 정의된(?) 앱이 있고

프로그래머가 원하는 기능을 구현하는 앱이 있다.


Django - Project 생성

프로젝트를 생성하기 전 최상단의 디렉토리인 루트 디렉토리를 만들고 그 안에 프로젝트를 위치시키는게 좋다

하나의 프로젝트만 사용한다면 상관없겠지만, 연관된 여러개의 프로젝트를 하나로 관리할수 있기 때문이다.

실습간 나는 CRUD라는 폴더를 최상단 디렉토리 구성하여 하위폴더에 프로젝트와 앱을 위치시켰다

django-admin statproject project_1
# 프로젝트 생성
python3 manage.py startapp app.1
CRUD  # 루트 디렉토리
  project_1
  ~~~
  ~~~ 

Django 기본구조

# CRUD 라는 루트 디렉토리에서
# django-admin startproject project_1

CRUD
  manage.py
  project_1
    __init__.py
    settings.py
    urls.py
    asgi.py
    wsgi.py

#CRUD : 장고 프로젝트와는 무관한 프로젝트를 포함하는 root 디렉토리

  # manage.py : Django 프로젝트와 다양한 방법으로 상호작용하는 커맨드라인 유틸리티라고 한다.

                          안의 내용에는 DJANGO_SETTINGS_MODULE 이라는게 있어 해당 장고 프로젝트의 setiings.py값을 알려주는 역할함

  # project_1 : 프로젝트를 위한 python package 들이 저장되는 디렉토리

                     해당 디렉토리 이름을 이용해 프로젝트 어느 경로에서든 python package를 import 할 수 있다.

      # __init__.py : python 에게 자신이 위치한 디렉토리가 패키지의 일부 임을 알려주는 용도의 단순 빈 파일.

      # project_1/settings.py : 현재 장고 프로젝트의 환경 및 구성을 저장(database, timezone, installed_apps...)

 : migration 이 실행되면 여기에 작성된 설정들을 탐색하여 필요한 데이터베이스 테이블을 생성해준다.

      #project_1/urls.py : 현재 장고 프로젝트의 URL 선언을 저장하는 파일

                                    장고로 작성된 사이트의 목차라고도 할 수 있다.

                                    settings.py 안에 있는 ROOT_URLCONF에 settings/url.py 하겠다고 선언해두었기 때문

     #asgi.py : 현재 프로젝트를 지원하기 위한 ASGI 호환 웹 서버의 진입점 (entry-point)

                    Django는 비동기를 지원하지 않았기에, 해당 기능을 사용하고자 할 때 사용함

     #wsgi.py : 현재 프로젝트를 서비스하기 위한 WSGI 호환 웹 서버의 진입점

# asgi 와 wsgi 두 파일이 있어야 web server로서 동작할 수 있다


App 만들기

# python manage.py startapp app_1

CRUD
  manage.py
  project_1
    __init__.py
    settings.py
    urls.py
    asgi.py
    wsgi.py
  app_1
    __init__.py
    adimin.py
    apps.py
    migrations/
      __init__.py
    models.py
    tests.py
    views.py

App이 첫뼈대를 완성했다고 할 수 있으며, 지금부터 해야할 작업은 아래와 같다.

# Project에 내 app 등록하기

# 뷰 작성하기

# URL 연결하기

# 데이터베이스 만들기

# 모델 만들기 + 데이터베이스에 연결하기


Project 내 app 등록하기

Django 에게 app_1 이라는 앱이 설치되었다는 것을 알려줘야 한다.

앱의 구성 클래스(config) 경로를 프로젝트/settings.py 에 입력해주면 된다.

'app_1.apps.AppConfig' 을 입력하여 저장함으로써 이제 django가 polls 라는 앱이 포함되었다는 사실을 알게 된다.

여기서 config 모듈의 네이밍(naming)은 앱이름+'Config' 이며,

앱의 제일 앞 글자만 대문자로 작성된다.

만약, 앱 이름을 app_1 가 아닌 app_with_underbar 라고 정하면 어떻게 될까? 그때는 'AppWithUnderbarConfig'가 된다.

* 위의 내용이 정석이라면, 사실상 'app_1' 만 추가하여도 문제없이 동작한다.

 

 


View 뷰 작성하기

app_1/views.py 를 라애와

from django.http import HttpResponse #어디 sys에 있겠지...?

def index(request):
		return HttpResponse("Hello, world. You're at the polls index.")

index 라는 페이지에 접근하면 사용자는 "Hello ~" 가 표출되는 것을 볼 수 있다 (아래 url 연결이 다 되었을 경우의 이야기이다)

이 뷰를 호출하려면 이와 연결된 URL이 있어야 한다.

출처 : https://wikidocs.net/70649 (점프투장고)

모델 (데이터베이스) 혹은 url --> 뷰 --> 템플릿(HTML)

출처 : https://velog.io/@yejin20/%EA%B0%95%EC%9D%98Django3.-Django-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EC%84%A4%EA%B3%84

 


URL 연결하기

app_1 경로에서 url 생성하기

뷰를 호출하려면 <- 이와 연결된 URL이 있어야하고 <- 이를 위해 URLConf가 사용됨 <- app_1 디렉토리에서 URLConf를 생성하려면 

urls.py 파일을 생성해줘야함 (해당 디렉토리에는 urls.py가 없기 때문)

즉, view 에 맞는 각각의 url이 있어야하고 그 url은 app_1/urls.py에서 만든다.

 

app_1/urls.py (생성)

from django.urls import path # 이것도 어디 sys에 django.http랑 같이 있겠지...?
from . import views # 같은 디렉토리에 있는 views.py 파일을 불러옴.

urlpatterns = [
	path('', views.index, name='index'), # view.py 안에 내가 만들어둔 index라는 함수를 데려왔네
]

ursl 모듈을 만들었다고 할 수 있으며 현재 이 모듈은 app_1(앱)의 개인 모듈이고 이를 최상위(project) project_1에서

바라 볼수 있도록 (참고할수 있도록) 만들어줘야한다.

 

project_1/urls.py

from django.contrib import admin
from django.urls import include, path

urlpatterns = [
    path('polls/', include('polls.urls')), # mysite.urls.py에다 polls.urls.py를 include
    path('admin/', admin.site.urls),
]

project_1.urls.py에다가 app_1.urls.py를 include() 했기 때문에 app_1.urls 내부에 있는 index 뷰가 URLConf에

연결되었다고 이해하자

* include()

다른 URLconf 를 참조할 수 있게 도와주는 함수

admin.site.urls를 제외한 그외 다른 URL 패턴을 포함할 때마다 항상 include를 사용해야 한다.

 


URL

장고는 URLconf(URL configurations)를 사용해서 URL과 일치하는 뷰를 찾아서 사용자에게 정보를 보여준다.

(인덱스 면 -> 인덱스 뷰  // 이미지 면 -> 이미지 뷰.. 등등)

만약 project라는 최상위 폴더 아래 app_1이라는 어플리케이션이 있는 구조라면 뷰와 url 파일은 아래와 같은 관계를 갖는다.

app_1/views.py 에서 app_1의 모델과 템플릿을 연결 --> app_1/urls.py 에서 app_1.views.py의 url을 등록 -->

최상위 URLconf인 project_1/urls.py에 include() 함수를 이용해 app_1.urls 전체를 등록한다

app_1/views.py (모델 & 템플릿) --> app_1/urls.py --> project_1/urls.py


Database 만들기

장고를 설치하면 기본적으로 SQLite가 함께 설치되는데, 장고는 이를 기본 구성으로 가지고 있다.

python3 manage.py migrate

migrate 명령어는 /mysite/settings.py 파일 내부에 있는 INSTALLED_APPS 를 보고

필요한 데이터 베이스를 생성하거나, 수정사항을 저장하는 역할을 한다.

, 이 명령을 실행한 후라면, 필요한 데이터 베이스의 기본 구조가 만들어졌다고 이해하면 된다.


여기까지 작성하였다면

models.py에 작성된 클래스를 통해 테이블을 생성하고

Django shell 이용해 데이터베이스에 직접 데이터를 집어넣고 , 데이터를 읽고, 수정하고, 삭제하는

CRUD를 진행하여 원하는 데이터를 넣을 수 있다.

codermun-log.tistory.com/132

 

django.6 가상환경 내에서 data 집어넣기

1. 가상환경 생성 (westarbucks) conda create -n westarbucks python=3.8 2. 가상환경 진입 진입후 가상환경내의 django, mysql, mysqlclient(mysql 설치시 자동설치) 설치 conda activate westarbucks 3. 프로젝..

codermun-log.tistory.com

출처 :

ychae-leah.tistory.com/

 

ychae-leah

 

ychae-leah.tistory.com

점프 투 장고

wikidocs.net/70649

 

위키독스

온라인 책을 제작 공유하는 플랫폼 서비스

wikidocs.net

wecode_비공개 노션

wecode.co.kr/

 

WeCode | 위코드 | 코딩 부트캠프 | 코딩교육

WeCode(위코드)의 부트캠프를 통해 개발자로서 커리어를 시작하세요.

wecode.co.kr

 

728x90
반응형