□ 기본 뷰
● my_site 라는 프로젝트 생성 후 first_app이라는 하위 앱생성
● url 로 https://***.**.**.*/first_app/ 과 https://***.**.**.*/first_app/딕셔너리키에 따른 페이지를 만들어보고자함
○ app > views.py
from django.shortcuts import render
from django.http.response import HttpResponse
#FBV
def simple_view(request): #request 시 SIMPLE VIEW 응답으로 표시
return HttpResponse("SIMPLE VIEW")
#딕셔너리 생성
articles = {
"sports" : "sports page",
"finance" : "Finance Page",
"politics" : "Politics Page"
}
def sports_view(request): #request시 sports에 대한 벨류 값이 응답으로 표시되도록 지정
return HttpResponse(articles["sports"])
def finance_view(request): #request시 finance에 대한 벨류 값이 응답으로 표시되도록 지정
return HttpResponse(articles["finance"])
○ app > urls.py
from django.urls import path
from . import views
urlpatterns = [
path("",views.simple_view, name="simpleview"), #""프로젝트레벨에서 정의. 만약 "sample/로 기재하면" /first_app/sample/이됨
path("sports/",views.sports_view, name="sportsview"),
path("finance/",views.finance_view, name="finance")
]
○ project > urls.py
from django.contrib import admin
from django.urls import path, include
from . import views
urlpatterns = [
path("", views.home_view), #project level urls
path('admin/', admin.site.urls),
#paht(라우트, include("app명.urls"))
path("my_app/", include("my_app.urls")),
path("first_app/", include("first_app.urls")), #app first_app에 대한 url 지정
]
□ 동적뷰
● my_site 라는 프로젝트 생성 후 first_app이라는 하위 앱생성
● url 로 https://***.**.**.*/first_app/ 과 https://***.**.**.*/first_app/딕셔너리키에 따른 페이지 응답과 키값이 아닌 숫자를 입력했을때 자동으로 페이지를 찾아서 응답해주는 뷰를 생성하고자함
○ app > views.py
- num_page_view 를 보면 사용자가 숫자를 입력 했을 때 입력한 값에 따라 코드내에서 지정한 딕셔너리를 검색 후 자동으로 페이지가 리다이렉트 되도록 HttpResponseRedirect 함수를 사용했음
- num_page_view에서의 reverse 함수는 URL 패턴의 이름과 인수를 사용하여 해당 URL을 동적으로 생성되도록 코드를 작성함. 주로 URL 하드코딩을 피하고, 코드의 가독성과 유지 보수성을 높이기 위해 사용.
- num_page_view에서의 reveser 함수 인자로 topic-page가 있는 데 이는 urls.py에서 news_views에 대한 url을 의미함
from django.shortcuts import render
from django.http.response import HttpResponse, HttpResponseNotFound, Http404, HttpResponseRedirect
from django.urls import reverse
# Create your views here.
#FBV
def simple_view(request):
return HttpResponse("SIMPLE VIEW")
#동적뷰
articles = {
"sports" : "sports page",
"finance" : "Finance Page",
"politics" : "Politics Page"
}
def news_view(request, topic):
try:
good_result = articles[topic]
return HttpResponse(good_result)
except:
bad_result = "Not find Page"
return HttpResponseNotFound(f"<h1>{bad_result}</h1>")
# raise Http404("404 Generic Error") # .html과 함께 사용시. HTTP404 를 하려면 settings DEBUG TRUE, ALLOW HOST 설정
#domain.com/first_app/1 입력하면 domain.com/first_app/finance 로 redirection
def num_page_view(request, num_page):
try:
topic_list = list(articles.keys()) #["sports","finance","politics"]
topic = topic_list[num_page]
webpage = reverse("topic-page", args=[topic])
return HttpResponseRedirect(webpage)
except:
bad_result = "입력하신 인덱스에 대한 카테고리가 준비중입니다."
return HttpResponseNotFound(f"{bad_result}"))
○ app > urls.py
from django.urls import path
from . import views
urlpatterns = [
path("",views.simple_view), #domain.com/first_app + view에서 simplie_view 사용
path("<str:topic>/",views.news_view, name="topic-page"), #url에 대한 name 지정
path("<int:num_page>", views.num_page_view)
]
○ project > urls.py
from django.contrib import admin
from django.urls import path, include
from . import views
urlpatterns = [
path("", views.home_view), #project level urls
path('admin/', admin.site.urls),
#paht(라우트, include("app명.urls"))
path("my_app/", include("my_app.urls")),
path("first_app/", include("first_app.urls")), #app first_app에 대한 url 지정
]
'Python > Django Ⅲ' 카테고리의 다른 글
(Review) Django CBV (0) | 2024.05.27 |
---|---|
(Review) Django Form (0) | 2024.05.27 |
(Review) Model 생성 및 Create, Read (0) | 2024.05.27 |
(Review) Django 템플릿 언어 (0) | 2024.05.24 |
(Review) Django 프레임워크 개요와 웹페이지 띄우기 기본예제 (0) | 2024.05.24 |