~Routing
*생활코딩 Django 편을 개인 공부를 목적으로 정리한 글임을 밝힙니다*
출처:https://www.youtube.com/watch?v=pbKhn2ten9I&list=PLuHgQVnccGMDLp4GH-rgQhVKqqZawlNwG
웹 어플리케이션을 만드는 작업중에 많은 부분은 공통적입니다. 따라서 어떠한 사이트를 만들더라도 똑같이 해야할 일들이 많습니다.
⇒ 이런 작업을 미리 해둔 소프트웨어를 Web Framework라고 합니다.
Django는 파이썬 진영의 대표적인 Web Framework로써,요청이 들어올때마다 웹 페이지를 순간적으로 찍어낼 수 있는 일종의 웹 페이지 공장입니다.
포트의 개념
127.0.0.1이라는 IP adress를 가진 서버컴퓨터에 3개의 서버 소프트웨어가 동작하고 있습니다. 저는 서버에 접속하기 위해 http://127.0.0.1 으로 주소를 입력합니다.
이때, 3개의 소프트웨어 중 어느것과 통신하게 될지 모호해지는 문제가 발생합니다.
이러한 문제를 해결하기 위하여 PORT라는 개념이 존재합니다.
예를들어, 첫번째 프로그램이 80번 포트를 listening하는 중이고, 제가 그 포트를 통해 접속하고 싶다면, http://127.0.0.1:80 이렇듯 주소에 포트번호를 주어 80번 포트를 listening하는 서버와 통신할 수 있게 됩니다.
파이썬 개발서버는 기본적으로 8000번 포트에서 listening하게 됩니다. 제가 8000번 포트를 접속하려 하는데, 가끔은 이미 8000번 포트에 파이썬 개발서버가 아닌 다른 서버가 실행되고 있을 수 있겠죠? 이럴때는
1. 그 개발 서버를 끄고 해당 개발 서버를 실행하거나
2. 나의 개발서버를 다른 포트에 listening시킴으로서 문제를 해결할 수 있습니다
2번의 경우 ,python manage.py runserver 8888, 이런식으로 다른 포트(8888)에서 서버를 운용하라는 명령어를 주면 됩니다.
app 만들기
으로 현재 디렉토리에 myproject라는 프로젝트를 시작합니다.
settings.py 안에는 프로젝트를 운용하는데 필요한 여러 설정들이 있습니다
urls.py 는 사용자가 접속하는 그 path에 따라서, 그 접속을(요청을) 어떻게/누가 처리해줄것인가를 지정하는 , 말하자면 routing(네트워크 안에서 통신 데이터를 보낼 때 최적의 경로를 선택하는 과정)을 담당하는 파일입니다
myproject 폴더 밖에 있는 manage.py : 프로젝트를 진행하는데 있어서 필요한 여러가지 기능이 들어가 있는 유틸리티 파일입니다.
근데, 실제로 애플리케이션은 프로젝트 안에서 구현하는 것이 아니라, app이라고 하는 더 작은 단위를 만들어서, 그 안에서 실제 구현을 하게 됩니다.
프로젝트를 만들다보면 복잡해질 수 있는데, 여러개의 app들을 만든 후, 서로 연관된 로직들을 모아서 grouping하게 됩니다.
각각의 app안에도 urls.py 라는 파일이 또 담겨져 있게 됩니다.
그리고 app 안에는 views.py 라는 파일이 담기고 , 그 파일 안에 여러 함수를 만들어 application의 구체적인 구현을 하게 됩니다.
전반적인 작동과정을 보면 이해가 한결 쉽습니다.
app을 직접 만들어봅시다. django-admin startapp myapp(뒤의 myapp은 app이름) 의 명령어를 실행하자
myapp이라는 폴더가 생겼습니다.
Routing
사용자가 접속한 각각의 경로를 누가 처리할 것인가를 지정하는 것이 routing입니다
Django에서는 project폴더 안의 urls.py가 가장 큰 틀의 routing을 하고, 그것을 적당한 app으로 위임을 해주면, app이 view안에 있는 특정 함수로 위임을 하여 그 함수가 작업을 처리하게 됩니다.
myproject/urls.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | """myproject URL Configuration The `urlpatterns` list routes URLs to views. For more information please see: https://docs.djangoproject.com/en/4.0/topics/http/urls/ Examples: Function views 1. Add an import: from my_app import views 2. Add a URL to urlpatterns: path('', views.home, name='home') Class-based views 1. Add an import: from other_app.views import Home 2. Add a URL to urlpatterns: path('', Home.as_view(), name='home') Including another URLconf 1. Import the include() function: from django.urls import include, path 2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) """ from xml.etree.ElementInclude import include from django.contrib import admin from django.urls import path, include #include를 사용하기 위해import해줌 # http://127.0.0.1/ # http://127.0.0.1/app/ # http://127.0.0.1/create/ # http://127.0.0.1/read/1/ urlpatterns = [ # urlpatterns안에 routing과 관련된 list가 있어야 함 path('admin/', admin.site.urls), # 관리자화면으로 이동하기 위한 routing설정 path('',include('myapp.urls')) # http://127.0.0.1/ 으로 사용자가 접속했을 때 myapp에 있는 urls의 views로 위임하기 위해 ] # include의 인자는 myapp.urls |
myapp/urls.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | """myproject URL Configuration The `urlpatterns` list routes URLs to views. For more information please see: https://docs.djangoproject.com/en/4.0/topics/http/urls/ Examples: Function views 1. Add an import: from my_app import views 2. Add a URL to urlpatterns: path('', views.home, name='home') Class-based views 1. Add an import: from other_app.views import Home 2. Add a URL to urlpatterns: path('', Home.as_view(), name='home') Including another URLconf 1. Import the include() function: from django.urls import include, path 2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) """ from xml.etree.ElementInclude import include from django.contrib import admin from django.urls import path from myapp import views urlpatterns = [ path('', views.index), #사용자가 아무것도 없는 경로로 들어왔다면, views.index 실행해라 path('create/',views.create), #사용자가 create로 들어왔다면 #views.create실행 path('read/<id>/',views.read) #사용자가 read/1으로 들어왔다면 views.read 실행 ] # 가변 값이라는 것을 나타내기 위해 <>안에 값의 이름을 넣음 |
myapp/views.py
1 2 3 4 5 6 7 8 9 | from django.shortcuts import render, HttpResponse # Create your views here. #클라이언트로 정보를 전송하는 역할을 하는 함수 def index(request): #관습적으로 request를 인자에 사용(요청과 관련된 여러 정보 들어오는 객체가 전달되기에) return HttpResponse('Welcome!') # client로 보내줄때 http를 이용해서 return하겠다는 의미 def create(request): return HttpResponse("create") def read(request,id): #가변값 id를 파라미터로 받아 return함 return HttpResponse("Read"+id) |
127.0.0.1:8000/read/1/ 로 접속했을 시