본문 바로가기
개발/Django_python 웹 프레임워크

Django 첫 걸음- 프로젝트, 앱 만들기, 웹 켜보기

by 자유로운 코끼리 2020. 7. 1.
728x90

우선 전에 만들었던 가상환경이 있다면 접속해줍니다.

#(터미널 입력)

. myvenv/Scripts/activate

1. Django 프로젝트 만들기

#(터미널 입력)

django-admin startproject first

django-adminn startpropject <project이름> 

first는 내가 만들고 싶은 프로젝트 명을 적어주면 됩니다.

first라는 파일이 생기신 걸 확인할 수 있을거에요!

또 first 프로젝트 안에 first라는 폴더가 있는 것을 확인할 수 있는데요.

지칭이 헷갈릴것 같으니 상위 폴더 이름을 firstproject로 바꿔줍니다.

firstproject
  ├───manage.py
  └───first
       └───settings.py
       └───urls.py
       └───wsgi.py
       └─── init.py

그리고 터미널에서 프로덱트 안에 들어가 볼까요?

cd라는 명령어를 이용해 폴더를 이용할 수 있습니다.

#(터미널 입력)

cd firsrproject

* 하나의 프로젝트가 하나의 웹사이트라고 생각하시면 됩니다.

- first(firstproject) : 루트디렉터리로 프로젝트를 위한 컨테이너입니다.

  이는 Django에 딱히 영향을 주지 않기 때문에 다른 이름으로 바꿔도 상관없습니다.

- manage.py : Django의 다양한 명령어를 실행할 수 있게 해주는 커맨드라인 형태의 유틸리티입니다. 

어플리케이션을 생성하고, 데이터베이스와 작업하고, 그리고 다른 설치작업 없이 개발 웹 서버를 시작할 때 사용됩니다.

그냥 서버를 돌리는데 이용되는 중요한 친구라고 생각하고 넘어가면 될 것 같습니다.

- first : 하위에 있는 first 디렉토리에 실질적인 프로젝트 파일들이 위치합니다. 사이트 공통 플랫폼 디렉토리입니다.

우리가 선언한 프로젝트 인데요. 그렇기 때문에 만약 이 이름을 바꾼다면 처음 터미널에서 선언해준 프로젝트와 이름이 달라지기 때문에, 이름을 바꾼 프로젝트를 컴퓨터는 찾지 못합니다. 

- settings.py : 프로젝트의 환경 설정 파일입니다. 웹 사이트의 모든 설정을 포함하고 있습니다.

  app 등록, static files의 위치, database 세부 설정 등이 들어갑니다.

- urls.py : 프로젝트 레벨의 URL 패턴을 정의하는 URLConf입니다.

  곧 만들 app에서 요청에 맞는 함수를 views.py에서 찾아 요청을 전달해줍니다.

- wsgi.py : Apache 등과 같은 상용 웹 서버와 WSGI 규격으로 연동할 수 있게 해주는 파일입니다.

- init.py : 이 디렉토리가 Python 패키지임을 알려주는 빈 파일입니다.

그리고 그 폴더 안으로 터미널 경로를 이동 합시다.

 

Django 서버 작동 시키기

#(터미널 입력)

python manage.py runserver

그럼 다음과 같은 화면을 보실 수 있을 겁니다.

이는 쟝고 개발을 위해 사용하는 개발 서버로,

순수 Python으로 작성된 경량 웹 서버입니다.

Django에 포함되어 있어 아무 설정 없이 바로 개발에 사용할 수 있습니다.

개발하고 있는 사람만 접속할 수 있는 곳입니다.

 

서버를 끄려면 서버가 실행중인 터미널창에서 ctrl + c를 누르면 됩니다.

2. app 만들기

* 프로젝트 안에는 다양한 기능들이 있고, 어떤 의미있는 기능들을 App으로 관리하게 됩니다.

이제 내가 만든 웹페이지(.html)파일을 웹에 띄우는 작업을 해볼텐데요.

이를 위해서는 app을 만들어야 합니다. 

app은 프로젝트의 구성 단위로, app들이 모여 project가 됩니다.

웹 프로젝트를 만들 때 각 기능을 app 단위로 분리해서 개발할 수 있습니다.

 

저는 app명을 myapp이라고 했지만, 여러분들이 하고 싶은 대로 이름을 바꾸어주어도 상관없습니다:).

#(터미널 입력)

python manage.py startapp myapp

 

그럼 다음과 같이 app이라는 폴더가 만들어진 걸 확인하실 수 있을거에요.

 - __init__.py : Python으로 하여금 이 디렉토리를 패키지처럼 다루라고 알려주는 용도의 단순한 빈 파일입니다.

 - admin.py : 앱에 대한 관리자 사이트에 대한 설정을 하는 파일입니다.

 - apps.py : 앱에 대한 기본 설정 정보를 담고 있는 파일입니다.

 - migrations/ : 데이터베이스 파일을 보관하는 디렉토리 입니다.

 - models.py : 모델에 대한 정보를 정의하고 저장하는 파일입니다.

   테이블을 생성하고 테이블의 필드가 정의된 파일이라고 볼 수 있습니다.

 - apps/tests.py : test case를 다루는 파일입니다.

 - apps/urls.py : 앱에 대한 url 정보를 설정하는 파일입니다.

 - apps/views.py : 앱에 대한 뷰를 설정하는 파일입니다.

 

 

**우선은 각 파일이 어떤 것을 의미 하는지를 알기보다는

우리는 우리만의 프로덱트를 만들기 위해 project를 만들었고, 그 작은 단위인 app도 만들었으며,

이제 이 project와 app은 어떤 티키타카를 할 것이라고 이해하시면 좋을 것 같습니다.

3. project에 app의 존재 알리기 : settings.py

우리는 myapp이라는 앱을 만들었지만,

아직 project는 그 app의 존재를 알지 못합니다. 

그래서 app을 project settings.py에 등록해주는 절차가 필요합니다.

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

여기에 내가 만든 app을 추가해줍니다.

'myapp.apps.MyappConfig',

또는

'myapp',

 줄 중 하나를 끝에 넣어주면 됩니다.

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'myapp.apps.MyappConfig',
]

이는 myapp이라는 apps을 만들었다고 말해주는 것으로,

myapp 폴더 안 apps.py라는 파일이 있고 그 파일 안에는 MyappConfig라는 클래스가 정의되어 있다는 것을

확인할 수 있습니다.

 

이제 project가 app을 인식하기 시작합니다.

 

4. Template만들기

template은 유저에게 보여질 화면이라 생각하면 됩니다.

html파일을 이 파일 안에다 만든다고 생각하면 됩니다.

웹 화면을 하나만 만들 것은 아니기 때문에, templates라는 파일을 만들어줍니다.

app폴더 안에 templates라는 폴더를 만들어주세요.

그리고 그 안에 html 파일을 만들어 줍니다.

5. 앱 기능 구현하기 : views.py 에 데이터를 처리하는 함수 만들기

유저에게 보여질 화면이 언제, 어떻게 처리될 지 등 함수,

기능을 구현하는 부분이 이 views.py입니다. 

예를 들어 어떤 링크로 들어가면 이 파일을 띄우세요~ 첫 화면에서는 html를 띄우세요~ 등과 같은 함수를

 만들어 주는 곳 

def index(request):
    return render(request, 'index.html')

# request 인자는 어떠한 요청을 처리하기 위해 사용됩니다.
# 결과 값을 render 함수를 통해 요청을 index.html 문서로 리턴해줍니다.    

 다음 코드는 요청이 들어오면 index.html 파일을 열어주는 index라는 함수를 구현했습니다.

index.html 파일을 연결하기 위해 기본적으로 사용하는 함수이니 기억해둡니다.

    

6. URL 요청을 views에 연결하기 : urls.py

urls.py는 쟝고가 사용자와 통신하는 곳으로,

내가 만든 html이 어떤 url을 입력할 때 뜨게 할지 결정하는 곳입니다.

 

출처: 멋쟁이 사자처럼

 

자, firstproject 폴더안의 urls.py을 열어봅시다.

일단 urls.py에서 myapp 안에 있는 views.py를 읽어와야하니 import를 해줍니다.

import myapp.views
urlpatterns = [
    path('admin/', admin.site.urls),
    path('', myapp.views.index, name='index'),
]

path는 3가지 인수를 받습니다. 

=> path('url이름', 함수이름, path이름)

첫번째는 route라는 아이로, 도메인 뒤에 붙는 url 부분이라고 보면됩니다.

 

두번째로 오는 건 내가 연결하고 싶은 views안에 정의된 함수입니다.

myapp 폴더 안에 views파일 안에 index라고 정의된 함수를 실행시키겠다라는 말입니다.

 

마지막에 적힌 name='index'은 이 path의 이름을 index라 정하겠다고 약속을 하는 내용으로,

이렇게 약속을 하면 django프로젝트 어디에서든 index라고 불러서 호출해 낼 수 있습니다.

 

 

 

정리해보자면,

  1. project를 만들고,
  2. app을 만들고,
  3. project에 app을 연결하고,
  4. app에서 templates폴더를 만들고 그 안에 html파일(template)을 만들고,
  5. app에서 html이 어떻게 처리될 지 결정하는 함수를 views.py에 만든다음,
  6. urls.py에서 해당 html파일과 url을 연결해주는 과정입니다.

 

 

*이미 만든 프로젝트에 접속할 때는!!!

- 가상환경 켜기 : . myvenv/Scripts/activate 

- 프로젝트 접속 : cd project

- 이제 프로젝트를 켤 수 있습니다:)! python manage.py runserver

댓글