본문 바로가기

사이드 프로젝트/django

Django 로 게시판 만들기 2.장고 프로젝트 생성하기

[개발환경:ubuntu20.04 lts]

장고는 웹어플리케이션은 여러 기능들을 app 이라는 이름의 모듈로 나누어서 프로젝트로 통합해서 개발하는 방식입니다. 장고를 사용하려면  우선 프로젝트를 생성해야 합니다.


장고에서는 전체 프로그램(여기선 게시판을 만드는 하나의 프로젝트을 의미)을 '프로젝트(project)'라고 부릅니다. 그리고 전체 프로그램을 동작시키기 위한 단위기능들을 하는 모듈을 '어플리케이션(application)'이라고 부릅니다.


예를 들자면 시계로 보면 시계자체를 전체  프로젝트이라 볼 수 있고, 시계가 작동하기 위한 초침 분침 등 각 부품들이 기능을 맡게 되는데 그걸 애플리케이션 이라고 비슷하게 생각하시면 될 것 같습니다. 

 

 


그리고 장고로 개발하려면 mvt 패턴을 알아야 합니다. model view templete을 의미합니다.

1)모델(model):데이터를 다루는 영역입니다.데이터베이스에 적용될 모델을 설계합니다.

2)뷰(view):데이터들을 어떤식으로 처리할지에 대한 논리부분입니다. 그래서 view파일에 함수를 정의합니다.

3)템플릿(Template):웹페이지에서 사용자에게 어떻게 보여질 지 html,css,javascript를  이용하여 작성합니다.


[1.1 장고 프로젝트 생성하기]

이전 포스팅에서 만들었던 프로젝트 폴더로 이동해서 프로젝트를 생성합니다.

$ django-admin startproject makeBoard

여기서 프로젝트명은 makeBoard라고 했습니다. (원하는 이름으로 설정해주시면 됩니다.)

 

 

 

[1.2 장고 프로젝트 디렉토리 구조]

boardPj/                  <-- 최상위 폴더 #폴더 명은 각자 다릅니다.
 |-- makeBoard/             <-- 장고 프로젝트 폴더  #폴더 명은 각자 다릅니다.
 |    |-- myproject/
 |    |    |-- __init__.py
 |    |    |-- settings.py
 |    |    |-- urls.py
 |    |    |-- wsgi.py
 |    +-- manage.py
 +-- boardVenv/                  <-- 가상환경 폴더  #폴더 명은 각자 다릅니다.

-manage.py:  장고의 명령어를 실행하는 파일입니다.(예를 들면 장고의 웹서버를 작동하게 하는 명령어 등등)

-__init__.py: 디렉토리에 이 파일이 있으면 파이썬 패키지로 인식합니다.

-settings.py:  전체 프로젝트의 설정파일입니다.

-urls.py: 프로젝트 url패턴을 정의하는 설정파일입니다.

-wsgi.py: Apache와 같은 웹서버를 WSGI 규격으로 연동하기 위한 파일입니다.

 

*wsgi란?

파이썬  언어로 애플리케이션을 좀 더 쉽게 작성할 수 있도록 애플리케이션과 웹서버 간 연동규격을 정의 한 것 입니다.

그래서 파이썬에서는 wsgi규격만 맞추면 어떤 웹서버도 파이썬 애플리케이션을 실행할 수 있습니다. 

 

예를 들면 아파치 웹서버에도 nginx 웹서버에서도  파이썬 애플리케이션을 실행할 수 있습니다. 

 

(이 때 유의해야할 사항이 apache나 nginx는 일반 범용 웹서버라 WSGI처리 기능이 없습니다,  그래서 중간에서mod_swgi,USGI,Gunicorn 같은 프로그램들이 WSGI처리 기능을 대신 해줍니다.)

 

 

[1.3 장고 웹서버 기본페이지 확인하기]

 

아래 명령으로 실행하면 웹서버가 시작됩니다.

$ python manage.py runserver

 

그리고 터미널에서 ctrl+c를 누르면 서버가  종료됩니다.

 

 

 

[2. 장고 어플리케이션 만들기]

이제 프로젝트를 만들었으니 각 기능을 하는 어플리케이션을 만들어보겠습니다.

 

저는 이 어플리케이션 이름을 boards1로 정했습니다.(원하시는 이름으로 정하시면 됩니다.)

 

어플을 만들때 django-admin startapp 어플명  하시면 됩니다.

$ django-admin startapp boards1

 

 

 

 

 

 

[2.1 장고 어플리케이션 디렉토리 구조]

boardPj/                  <-- 최상위 폴더 #폴더 명은 각자 다릅니다.
 |-- makeBoard/             <-- 장고 프로젝트 폴더  #폴더 명은 각자 다릅니다.
 |    |-- myproject/
 |    |    |-- __init__.py
 |    |    |-- settings.py
 |    |    |-- urls.py
 |    |    |-- wsgi.py
 |    |-- boards1/                <-- 방금 만든 장고 어플리케이션!
 |    |    |-- migrations/
 |    |    |    +-- __init__.py
 |    |    |-- __init__.py
 |    |    |-- admin.py
 |    |    |-- apps.py
 |    |    |-- models.py
 |    |    |-- tests.py
 |    |    +-- views.py
 |    +-- manage.py
 +-- boardVenv/                  <-- 가상환경 폴더  #폴더 명은 각자 다릅니다.

 

  • migrations/: 데이터 변경사항을 관리하기 위한 디렉토리입니다. 데이터베이스에 추가,삭제,변경이 발생하면 변경내역을 기록   한 파일이 이 디렉토리에 위치하게 됩니다.

  • admin.py: admin 사이트에 모델 클래스를 등록해주는 파일입니다.

  • apps.py: 어플리케이션 모델클래스를 정의하는 파일입니다.

  • models.py: 데이터 베이스 모델클래스를 정의하는 파일입니다.

  • tests.py: 단위 테스트용 파일입니다.

  • views.py: 뷰 함수를 정희하는 파일입니다. 함수형 뷰 클래스형 뷰 모두 이 파일에 정의합니다.

디렉토리에 대해 이해가 되지 않으면 그냥 넘어가셔도 됩니다.

 

 

 

 

 

이제 settings.py를 에디터로 열고  INSTALLED_APPS로 들어가봅시다.

현재는 기본적인 앱들만 있습니다. 

 

여기서 아까 제가 만든 어플리케이션 boards1을 추가해줍니다.

 

* 콤마 빼먹지 않게 주의하시고

 

 

[3.view 함수 테스트]

from django.shortcuts import render

# 추가하기
from django.http import HttpResponse
# 추가하기
def home(request):
    return HttpResponse('안녕하세요.성혁입니다.')

 

[4.url에 view함수 연결]

boards1 어플리케이션의 view에서 작성한 home 이라는 함수("안녕하세요 셩혁입니다 라고 리턴값 주는 함수")를

url에 연결시켜보겠습니다.

 

(1)우선 from 어플리케이션명 import views 라고 추가해줍니다

(2) 그리고 urlpatterns에 path('사용할 url이름/',views.home,name=home),이라고 적어줍니다.

(여기서도 콤마 주의하셔야 됩니다. 저는 viewTest라고 url 이름을 임의로 정했습니다.)

 

 

[5.화면 출력되는지 확인하기 ]

장고 웹서버를 작동시켜 방금 작성한 view함수가 url에 잘 연결되었는지 확인해봅니다.

 

 

 

여기서 마이그레이션에 대한 경고는 이후 마이그레이션을 할 것이기에 지금은 넘어갑니다.

$ python manage.py runserver

 

아까 view파일에서 작성한 home함수가 url패턴에  작성한 주소로 잘 연결되는 것을 볼 수 있습니다.

[참고 블로그]

https://simpleisbetterthancomplex.com/series/beginners-guide/1.11/

 

A Complete Beginner's Guide to Django

A Django tutorial series for complete beginners. A comprehensive guide covering all the basic aspects of Django models, views, templates, testing, admin.

simpleisbetterthancomplex.com

https://opentutorials.org/module/4034

 

Django

Django 2019-05-21 14:19:01 | 공개

opentutorials.org