티스토리 뷰
장고 웹서버 실행
c:\dev\mysite>python manage.py runserver
개발 할 때 간단하게 해당 서버를 127.0.0.1/8000 포트로 테스트 웹서버를 확인할 수 있다.
세팅은 다음과 같이 된다.
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings")
DJANGO_SETTINGS_MODULE 파일이 없다면 기본 세팅을 실행(현재 실행되고 있는 건 setting 모듈
1. django setting 모듈에 설정값 바꾸기
2. mysite.setting를 바꾸기
django의 모든 환경설정이 되기 전에 처음으로 불러오는 함수가 또 있다.
global_setting.py가 setting.py보다 먼저 로딩되기 때문에,
setting.py에서 debug 모듈을 설정할 수 있다.
global_settings에 있는 값을 변경하고 싶다면 그 후에 다른 setting에서 바꿔주면 된다.
장고 앱 생성
python manage.py startapp 앱이름
폴더가 하나 새로 만들어진다.
admin.py
현재 앱의 모델을 adminadmin앱에서 사용하기 위한 설정 파일이다
apps.py
현재 앱에 대한 환경설정 파일이다
models.py
현재 앱에서 사용하는 모델에 대해 구현하는 파일이다(데이터 처리에 대한 기능)
tests.py
현재 앱을 테스트하기 위한 파일이다
views.py
현재 앱의 서비스 기능을 구현하는 파일이다
__init__.py
현재 디렉터리를 패키지로 인식하기 위한 파일이다
migrations
현재 앱의models.py py에 구현된 모델들에 대한 변경작업을 기록하는 파일들이 저장되는 디렉터리이다
장고 앱 등록을 하려면, setting.py에서 INSTALLED_APPS에 새로 등록된 앱을 추가해야 한다.
"django.contrib.staticfiles" 아래에 "app 이름"을 추가해주면 된다.
개발할 때 썼던 app 같은 것들은 _dev라고 해서 이름을 바꾼다.
setting 또한 이름을 _dev 붙여서, 실제로 deploy 할 때는 이름을 바꾸거나, 빼거나 해서 구현한다.
ROOT_URLCONF
앱은 url을 받으면 요청에 따른 뷰를 실행해야 한다.
그 경로가 mysite.urls로 기본으로 설정되어 있다.
mysite.urls
urls.py의 내용을 열어보면 이렇다.
"""
from django.contrib import admin
from django.urls import path
urlpatterns = [
path("admin/", admin.site.urls),
]
어떤 url이 들어오면 어떤 요청을 실행한다. 그게 urlpatterns라는 정보이다.
해당 정보를 처리해주는 게 path라는 함수이다.
admin/이 url 정보이고, admin.site.urls가 view에 대한 정보이다.
이 url을 넣을 때는 127.0.0.1:8000/에서 추가된다.
해당 이름을 원하는 걸 넣으면 된다. 여기서는 예시로 127.0.0.1:8000/admin/이 될 것이다.
.
URL과 뷰의 매핑
그런데 url을 한 곳에 다 넣으면 유지보수가 힘들다.
그래서 각자 앱마다 url.py 모듈을 따로 만든다.
그런데 장고는 ROOT_URLCOOF만 읽는다.
그래서 해당 파일에 대한 정보를 django에 등록해줘야 한다.
127.0.0.1:8000/에서, 뒤에 붙는 이름을 앱 이름으로 한다.
from django.urls import path,include
urlpatterns = [
path("앱 이름/", inclue("앱이름.urls")),
]
/blog/test1/이라는 url 이름이 있다면
urlpatterns =[ path('blog/', include('blog.urls')) = mysite/urls.py로 만들고,
urlpatterns =[ path('test1/', views.test1_view) = blog/urls.py로 만들어서,
하위 디렉토리를 찾아가는 것처럼 만드는 것이다.
mysite/urls.py
from django.contrib import admin
from django.urls import path,include
urlpatterns = [
path("admin/", admin.site.urls),
path("blog/", include("blog.urls"))
]
blog/urls.py
from django.urls import path,include
from . import views
urlpatterns=[
path("test1/", views.test1)
]
다만 이렇게 하면, blog라는 앱의 하위 디렉토리에 urls.py를 하나 더 만들어야 한다.
그러나 유지보수는 편해진다.
이제 뷰를 만든다.
뷰 만들기
뷰는 앱 폴더에 있다.
from django.shortcuts import render
from django.http import HttpResponse
# Create your views here.
def test1(request):
return HttpResponse("blog/test1 응답!")
클라이언트에서 요청 정 보가 만들어져서, 웹 서버는 요청 정보를 받는다.
웹 서버는 웹 브라우저가 요청한 파일을 찾아서 클라이언트에 응답하거나, 요청된 파일을 수행시키고 그 결과를 브라우저에 응답한다.
그리고 웹 브라우저는 웹 서버로부터의 응답 결과를 출력한다.
이 과정은 http 프로토콜에 의해서 통신이 일어난다.
http 요청정보
요청정보는 요청줄, 헤더와 body로 이루어져 있다.
요청 줄 + 헤더 + 몸체
요청 줄 : 요청 방식 URI HTTP 버전(GET or POST / edu/index.html http/ 1.1)
URI = URL의 포트 번호 다음부터의 정보
헤더 : name : content - client에 관련된 정보(ip, 브라우저, 언어 정보 정도)
만약 필요하다면 요청 정보의 헤더 값을 뒤져보면 된다.
몸체 :
http 응답정보
여기는 상태 줄, 헤더, 메세지 몸체로 나뉘어져 있다.
상태 줄 : HTTP 버전 Status-code reason-phrase(HTTP/1.1 200 OK)
status-code는 처리에 대한 응답 코드(404,200,502 등등)
헤더 : name:content
메시지 몸체 : 기타 json 형식 텍스트들
이에 대한 건 개발자 도구 - 네트워크에서 어떠한 홈페이지를 로딩했을 떄 아무거나 누르면 status로 알 수 있다.
그리고 이 부분에 request 헤더와 response 헤더가 전부 들어가 있다.
응답정보 헤더 안에 text/html charset utf-8 이런 정도들이 들어 있다.
response를 클릭하면 응답 정보의 body 안에 들어 있는 정보가 포함된다.
httpResponse라는 객체는 응답 정보를 리턴해주는 함수이다.
즉, request가 전달 되었을 떄 실행되게 만들어야 한다는 의미이다.
다시 manage.py runserver를 이용해서 장고를 실행해본다.
http://127.0.0.1:8000/blog/test1/
이렇게 하면 해당 응답 정보가 뜬다.
만약에 test1/후에 123,456,789를 줘서, id를 나눠서 동적으로 만들고 싶다면
blog/urls.py
from django.urls import path,include
from . import views
urlpatterns=[
path("test1/", views.test1),
path("test2/<id>/", views.test2),
]
<>는 데이터를 동적으로 받겠다는 뜻이다.
이 값은 view에서 사용된다. 즉, 데이터를 구분해주는 중요한 값이 된다.
그러나 데이터를 구분해주는 변수가 필요하다. 여기서는 id가 되는 것이다.
그러면 해당 변수 이름으로 view에서 쓸 수 있다.
그리고 나서 test2를 만들어주면 된다.
from django.shortcuts import render
from django.http import HttpResponse
# Create your views here.
def test1(request):
return HttpResponse("blog/test1 응답!")
def test2(request,id):
return HttpResponse(id, "id 응답!")
path 변수
이게 path 변수 선언란이다.
이 path 변수는 여러개를 쓸 수 있다.
또한 타입을 바꿔서 넣을 수도 있다.
from django.urls import path,include
from . import views
urlpatterns=[
path("test1/", views.test1),
path("test2/<id>/<int:month>/<int:day>", views.test2),
]
django 자체에 intconvert라는 메소드가 있다.
<int:id>와 같이 쓰면, int로 바꿔준다.
기본 str이고, int,path,slug,str,uuid도 있다.
django.urls.converts 모듈이다.
from django.shortcuts import render
from django.http import HttpResponse
# Create your views here.
def test1(request):
return HttpResponse("blog/test1 응답!")
def test2(request,id):
return HttpResponse(id)
def test3(request,year,mon,day):
return HttpResponse(f'{year}년 {mon}월 {day} 일')
이렇게 path에 들어간 변수들을 모을 수 있다.