본문 바로가기

Back-end & Server/Django

[Django] 뷰와 URLconfs

728x90
반응형

페이지 띄우기

  • 먼저 mysite 디렉터리 안에 view.py라는 파일을 만들어준다.
    • 꼭 view.py이라고 이름 지을 필요 없이 자유롭게 만들어도 상관없음

 

  • django의 http 모듈 안에 있는 HttpResponse 함수를 임포트 한다.
    • HttpResponse 함수는 매개변수로 받은 문자열을 화면에 띄운다.
      • 문자열은 html 코드가 될 수 있음
from django.http import HttpResponse
  • HttpResponse를 반환하는 임의의 함수를 하나 작성한다.
// 일반적인 함수
def hello(request):
    return HttpResponse("Hello Django!")
// 한줄 작성(HttpResponse()만 리턴하는 코드만 있을 경우)
def hello(request): return HttpResponse("Hello Django!")
// 람다함수
hello = lambda request : HttpResponse("Hello Django!")
  • 이렇게 함수를 다작 성했다면 urls.py 파일을 열어 만들었던 view.py를 임포트 한다.
# view.py는 mysite안의 파일이기 때문에 mysite.view로 적어줘야 인식
import mysite.view
  • urlpatterns 리스트 안에 path() 함수로 만들었던 함수와 접속할 url을 설정한다.
urlpatters = [
    path('admin/',admin.site.urls), # 기본으로 작성되어 있음
    path('hello/',mysite.view.hello) # 만든 페이지
]

# mysite.view를 계속써야하는 번거로움을 피하기 위해
from mysite.view import *
urlpatters = [
    path('admin/',admin.site.urls), # 기본으로 작성되어 있음
    path('hello/',hello), # 만든 페이지
]

  • url을 빈칸으로 두면 index 페이지가 됨
urlpatterns = [
    path('admin/',admin.site.urls),
    path('',hello),
]

정규 표현식

  • Django의 URLconf은 URL 매칭을 위해 임의의 정규 표현식을 허용
  • 파이썬 정규 표현식(파이썬 3.x부터는 re 모듈을 통해 정규 표현식 지원)
 

re — Regular expression operations

Source code: Lib/re/ This module provides regular expression matching operations similar to those found in Perl. Both patterns and strings to be searched can be Unicode strings ( str) as well as 8-...

docs.python.org

  • Raw String 문법을 통해 Escape 문자(\)를 두 번 쓰지 않아도 됨
  • Django 2.0 버전 이상부터는 정규 표현식을 사용하려면 path() 대신 re_path()를 사용해야 한다.
from django.urls import re_path
# 웹 사이트 루트에 대한 퀵 노트
re_path(r'^$',hello)

 

동적 콘텐츠

  • 동적인 콘텐츠를 페이지에 표시할 수 있음
  • datetime 모듈을 사용하여 시간을 나타내 보자
# currentTime.py
import datetime as dt
from django.http import HttpResponse as HR
def currentTime(request):
    now = dt.datetime.now()
    html = "<html><body>It is now {0}</body></html>".format((now,))
    return HR(html)
# urls.py
from django.urls import re_path
from mysite.currentTime import *

urlpatterns = [
    re_path(r'^now/$',currentTime),
]

  • 새로고침 할 때마다 값이 변경됨

 

동적 URL

  • url을 동적으로 설정할 수 있음
    • ex. now1/ , now2/, now3/, now4/.. 를 직접 입력하지 않고 설정

 

  • offset이라는 매개변수를 추가해줘야 함
    • offset은 유니코드로 전달됨
# currentTime.py
import datetime as dt
from django.http import HttpResponse as HR
def currentTime(request,offset):
    now = dt.datetime.now()
    html = """<html><body>
    <h1>It is now {0}</h1>
    <h1>Offset --> {1}</h1>
    </body></html>""".format(now,int(offset))
    return HR(html)
#urls.py
from django.urls import re_path
from mysite.currentTime import *

urlpatterns = [
    re_path(r'^now/(\d{1})/$',currentTime), # 숫자 범위를 1자리 까지만 제한
]

 

Django의 오류 페이지

  • django는 오류 페이지는 어느 부분에서 어떤 오류가 발생했는지 세세하게 알려줌
    • URLconf Django가 URLconf 내에 어떤 것을 사용했는지와 모든 패턴을 설명
    • 404 에러에 대한 이유를 알 수 있음

 

  • 단! 오류 페이지(Page not found)는 디버그 모드인 경우에만 나타난다.
# view.py
from django.http import Http404
def error(request):
    try:
        print("hello")
    except ValueError:
        raise Http404()
# urls.py
from mysite.view import *
urlpatterns = [
    path('error/',error)
]

728x90
반응형

'Back-end & Server > Django' 카테고리의 다른 글

[Django] 폼(Form)  (0) 2023.01.20
[Django] Admin 사이트  (0) 2023.01.16
[Django] 모델  (0) 2023.01.16
[Django] 템플릿  (0) 2023.01.01
[Django] Django 시작하기  (0) 2022.12.28