728x90
반응형
페이지 띄우기
- 먼저 mysite 디렉터리 안에 view.py라는 파일을 만들어준다.
- 꼭 view.py이라고 이름 지을 필요 없이 자유롭게 만들어도 상관없음
- django의 http 모듈 안에 있는 HttpResponse 함수를 임포트 한다.
- HttpResponse 함수는 매개변수로 받은 문자열을 화면에 띄운다.
- 문자열은 html 코드가 될 수 있음
- HttpResponse 함수는 매개변수로 받은 문자열을 화면에 띄운다.
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 모듈을 통해 정규 표현식 지원)
- 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 |