이끼의 생각

Django Web (3) 장고 앱 만들고 실행해보기.(Hello World!) 본문

파이썬 장고 웹 프레임워크

Django Web (3) 장고 앱 만들고 실행해보기.(Hello World!)

IKKIson 2019. 5. 19. 20:40

프로그래밍 언어, 어플리케이션 등을 처음 공부를 시작하면서 가장 처음으로 만드는 것이....


Hello World!


입니다. 


이번 3편에서는 간단한 Hello World! 앱을 만들어볼께요!!


이전 1편과 2편을 보신 후 이어서 파이참에서 작업을 해보겠습니다.

(명령어실행은 프롬프트, 파워셀에서 작업하는 것과 똑같지만 파이참은 파이참터미널에서 자동으로 가상환경이 활성화됩니다. 파이참을 사용하시는 경우 활성화 상태를 확인해보시고, 다른 환경이신 경우 직접 가상환경을 활성화 시키고 작업해주세요~~)



앱 ??


장고프로젝트는 앱으로 구성되있습니다. 앱은 웹사이트를 기능별로 구분해놓은 것입니다.


예를 들어서, 홈페이지에서 게시판, 이메일, 결제 등의 기능들을 APP으로 구성하게되는 겁니다. 그래서 다른 홈페이지에서 이메일 기능!, 결제 기능 들이 필요하면 가져다가 사용하시면 됩니다.



앱 생성하기


앱을 만드는 명령어는 다음과 같습니다.


> python manage.py startapp [MyAppName]


ex) python manage.py startapp elections


명령어를 실행하면 몇 초 기다리시면 앱이 생성합니다.



앱 생성 명령어를 실행하시고 바로 생성이 안된다고 당황하지마시고 잠시 기다리시면 됩니다.~~~




앱에서 Hello World 페이지 만들기!!


프로젝트 이름과 같은 디렉토리는 프로젝트의 기본적인 설정을 담고있으며 직접만든 앱은


view에서 작업을 해봅시다!


- view의 위치 : MyDjangoProject/MyApp/views.py

- 게시글 기준 view 위치 : IKKIsonDjango/elections/views.py


//view 이미지




(1) HttpResponse를 import 합니다.


(2) index 라는 함수를 만듭니다.


from django.shortcuts import render
from django.http import HttpResponse

# Create your views here.
def index(request):
return HttpResponse("Hello World!")




요청/응답 처리하기


페이지 요청 시 "Hello World " 라고 HttpResponse를 보내주는 코드 입니다.


그런데 이 코드가 실행하기 위해서는 먼저 해야될 게 있습니다.


어떤 URL 요청에 대해서 우리가 만든 index 함수가 실행되게 지정해야됩니다.

이과정은 2단계로 구성되는데 elections app 안에 views 파일이 있고, views 안에 index라는 함수가 있는데 (1)사트에서 접속 시 elections app이 실행되는 조건을 정해줍니다. 그리고 (2) elections app이 실행되면 어떤 경우에 index함수가 실행되는지 지정해야됩니다.






(1) elections App 지정/실행하기 (본인이 만든 App을 실행하기.)


- 자신의 프로젝트와 같은 폴더 안에 urls.py를 열어봅니다.



저의 ulrs의 위치는 IKKIsonDjango/IKKIsonDjango/urls.py 가 되겠네요.


ulrs.py에 있는 urlpatterns은 서버로 요청이 들어오면 이 요청을 누가 어떻게 처리할지 담당자를 지정해줍니다.


ulrs.py를 보면 이런 소스코드가 있습니다.


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

urlpatterns = [
path('admin/', admin.site.urls),
]


path('admin/', admin.stie.urls)라고 되어있습니다.

path의 첫번째 파라미터는 접속할때 주소, 두번째 파라미터는 누가 처리할지를 의미합니다.


url에 admin이 정의되있는데, admin으로 접속할때 admin이 처리하라고 되있는겁니다.

그러면 한번 admin으로 접속을 해보겠습니다.




만약 로컬호스트로 우리가 만든 elections app으로 접속하고 싶은데 어떻게 해야될까요?


admin으로 접속하듯이 똑같은 코드를 넣어볼께요.



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

urlpatterns = [
path('admin/', admin.site.urls),
path('', include('elections.urls'))
]

include를 추가로 import 하세요.


path('', include('elections.urls')) 에서 첫번째 파라미터값 '' 은 localhost:8000으로 그냥 접속할 때의 주소를 정해주었고, 두번째 파라미터값 include('elections.urls') 은 첫번째 파라미터는 이 주소로 요청하면 elections.ulrs 이 요청을 처리하라고 지정해주는 겁니다.



여기까지가 elections App이 실행되게 만들어 보았습니다.!!


다음은 elections에서 views의 index 함수가 실행되게 만들어볼께요




(2) elections App에서 views의 index함수 실행하기! (본인이 만든 App의 기능을 실행하기.)


눈치채신 분들도 있는데, App을 생성하시면 Default 세팅으로 여러 파일들과 디렉토리가 생성됩니다.

앞의 단계에서는 elections.urls 으로 요청을 넘겼는데....

네 맞습니다. urls.py는 기본적으로 생성되지 않습니다. 본인이 만든 App에서도 접속 요청에 따라서 처리할 담당을 지정해주고 싶으면 프로젝트 내 같은이름의 폴더에서 urls.py와 같은 방식으로 만드시면 됩니다.


elections 앱에 urls.py를 생성합니다.




그리고 똑같이 복사하고 urlpattern의 내용을 지워줍니다.





elections앱에 있는 views 모듈을 사용하려면 views를 import 해야됩니다.




이제 views에 있는 index라는 함수를 지정해봅시다.



이제 서버를 실행해서 접속을 해봅시다.



여기까지 됬으면 성공하셨습니다.ㅎㅎ




앱 등록하기


urls의 urlpattern이용하여서 간단한 문자열출력은 되었습니다. 그러나 웹에서는 복잡한 작업이나 연동이 많은 경우가 많습니다. 장고에서 문제없이 앱을 사용하기위해 앱을 등록을 해주여야합니다. 방법은 간단합니다.


setting.py에서 INSTALLDES_APPS 을 찾아서 추가한 앱을 작성하시면됩니다. 이번 편에서는 elections 앱을 만들었으니 'elections'라고 추가해봅니다.






정리


장고프로젝트의 urls.py 에서 localhost:8000으로 요청을 App에서 처리하도록 지정한 다음, App에서도 urls를 만들고 urls에서 views를 사용하기 위해 import를 하고 views에 선언함 함수에서 요청을 처리하도록 지정하였습니다.



오늘 만들어본 소스코드와 경로들입니다.

순서대로 보시면 되요~~


#IKKIsonDjango\elections\views.py
from django.shortcuts import render
from django.http import HttpResponse

def index(request):
    return HttpResponse("Hello world")
#IKKIsonDjango\IKKIsonDjango\urls.py

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

urlpatterns = [
    path('', include('elections.urls')), #localhost:8000으로 요청이 들어오면 elections.urls로 전달
    path('admin', admin.site.urls)
]
#IKKIsonDjango\elections\urls.py
from django.conf.urls import url
from . import views #.은 현재 폴더(elections)를 의미합니다.

urlpatterns = [
    path('', views.index),
]




**출처 및 참고**

[블로그] 초보몽키님의 개발공부로그

[Wikidocs] 핀코인님의 Django 자습

[프로그래머스] 정두식님의 장고를활용한 웹사이트만들기 동영상강의

[오픈소스튜로리얼] Quasar Beyond님의 Django : Python WebFrameWork 동영상강의

[장고걸스공식] 이수진님 외. 장고걸스 튜토리얼 한국어번역

[장고걸스공식] 이수진님 외. 장고걸스 튜토리얼 심화 한국어번역

장고 공식 Document Tutorial

Comments