본문 바로가기

문돌이 존버/Django 스터디

Mac 버전 장고(Django) 웹서버 기본 세팅

반응형

지난 번 Mac 버전 파이썬 가상환경을 설정하고 장고 웹서버를 설치하였는데요. 오늘은 이어서 장고 웹서버 세팅하는 법을 살펴보겠습니다. 먼저 가상서버를 활성화하고 first 폴더에 들어가면 setting.py 파일이 보입니다. 자세히 살펴보면 다음과 같은 내용이 나오는데요. 

# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True 

ALLOWED_HOSTS = []

여기서 DEBUG를 True로 설정하면 장고 웹서버에 잘못된 명령이 입력될 경우, 자세하게 디버깅을 해줍니다. 개발자 입장에선 편할지 모르겠으나 실제 사용자에게 서버를 공개할 때는 부적절하겠죠. 이 경우에는 DEBUG = False로 설정한 뒤, ALLOWED_HOSTS = [ * ] 처럼 괄호 안에 '*'를 입력해야 합니다. *는 모든 호스트를 의미합니다. 다음은 언어와 시간대를 세팅하겠습니다. 

# Internationalization
# https://docs.djangoproject.com/en/3.0/topics/i18n/

LANGUAGE_CODE = 'en-us'

TIME_ZONE = 'UTC'

LANGUAGE_CODE = 'ko-KR' / TIME_ZONE = 'Asia/Seoul' 로 바꿔주세요. 그리고 웹서버를 가시면 아래와 같이 한국어로 잘 설정된 것을 확인할 수 있습니다. 

지금부터 장고 앱을 설치해보겠습니다. manage.py가 있는 위치에서 python manage.py startapp "myapp" 명령어를 입력해주세요.(myapp은 개인이 원하는 이름으로 설정하면 됩니다.) myapp이라는 디렉토리가 또 생겼을 겁니다. 그러면 first 폴더 안에 있는 urls.py 파일을 열고 아래와 같이 path를 추가해줍니다.

from django.contrib import admin
from django.urls import path, include
urlpatterns = [
    path('admin/', admin.site.urls),
    path('app/', include("myapp.urls")) 
]

마지막 줄이 의미하는 바는 app/ 경로로 들어오면 myapp의 url config 파일로 연결하겠다는 것인데요. myapp 폴더 안에 urls.py 라는 파일을 생성하고 아래처럼 채워넣습니다.

from django.urls import path
from . import views

urlpatterns = [
    path("", views.wrtie_word)
]

from . import views 는 제가 미리 작성한 부분인데, views.py에 들어가서 아래처럼 작성해줍니다. HttpResponse 모듈을 사용하여 웹 페이지에 그대로 나타내는 것으로 파이썬의 print에 해당한다고 보면 되겠네요. 

from django.shortcuts import render, HttpResponse

# Create your views here.
def write_word(request):
    return HttpResponse("Hi, django world")

이렇게 설정한 뒤 127.0.0.1:8000/app/ 에 들어가면 Hi, django world 라고 표시된 것을 확인할 수 있습니다. 여기서 잠시 url 구성을 살펴보고 가겠습니다. 

127.0.0.1:8000 => ip 주소: 포트넘버

127.0.0.1의 경우 각자 로컬 환경의 고유한 ip 주소를 의미합니다. 즉 모두가 127.0.0.1의 주소를 가지겠지만 같은 주소가 아닌 유니크(unique)한 주소라는 것입니다. 만약 특정 도메인 주소를 얻게 되면 ip 주소는 보이지 않고 도메인 이름이 나타나겠죠. 

www.somedomain.com/ path / ? name=sol&like=python#tag 

여기서 '?' 를 통해 특정 request를 보낼 수 있는데요. 이를 get parameter 또는 query string이라 부릅니다. 위의 예시를 설명해보자면 name=sol이고 like=python이라고 웹서버에 요청을 보낸 것이죠. #은 태그 또는 앵커라고 부르며 한 페이지의 특정 위치를 나타낼 때 이용합니다. 

아래는 웹페이지를 여는 시점(datetime)과 string query 여부에 따른 별도의 설정을 추가한 것입니다. 

import datetime

from django.shortcuts import render, HttpResponse

# Create your views here.
def write_world(request):
    now_time = str(datetime.datetime.now())
    name = request.GET.get('name') # 내가 보낸 string query에 해당하는 내용
    # GET을 사용하면 QueryDict 형태로 반환
    # GET['name']이라 설정하고 ? name='~~' query를 보내지 않으면 에러 => GET.get('') 형태로 수정
    if not name: # name을 따로 지정하지 않고 string query를 보낼 때 설정
        name = 'Guests'
    return HttpResponse(
        "<h1> Hi, django world {}</h1>".format(name) 
        + '<br/><br/>' 
        + now_time
        )

마지막으로 장고 구성을 살펴보면 크게 다음과 같습니다. 앞 글자를 따서 장고 MTV라고도 하는데요. 저희가 이번에 다룬 것은 뷰의 화면 구성 및 통제에 해당한다고 하겠습니다. 다음에는 데이터베이스를 관리하기 위해 models.py 세팅을 살펴보겠습니다. 

1. 모델(Model) - 데이터베이스 관리
2. 탬플릿(Template) - 유저 인터페이스(HTML, CSS)
3. 뷰(View) - 화면 구성 및 통제, 데이터베이스와 탬플릿 연결
728x90
반응형