視圖函數
文章目錄
- 視圖函數
- @[toc]
- 一、什么是視圖函數
- 二、簡單視圖函數
- 三、返回錯誤視圖
文章目錄
- 視圖函數
- @[toc]
- 一、什么是視圖函數
- 二、簡單視圖函數
- 三、返回錯誤視圖
一、什么是視圖函數
- 所謂視圖函數(簡稱視圖),本質上就是一個Python函數,用于接收Web請求并且返回Web響應。
- Web響應可以包含很多類型,比如常見的HTML網頁、重定向和404錯誤,也可以是XML文檔和圖像文件等。另外,無論視圖函數的具體處理邏輯如何定義,建議都返回某種類型的Web響應。
- 視圖函數的代碼可以寫在項目的任何Python目錄下。但是,對于基于Django框架的Web項目而言,通常約定將視圖函數寫在項目或應用目錄下名稱為views.py的文件中。
二、簡單視圖函數
這里設計一個基于Django框架的Web應用項目,實現了將當前日期和時間編碼為HTML文檔進行返回的簡單視圖函數。
(1)首先,將該Web項目應用的名稱定義為“ViewDjango”,實現返回當前日期和時間的簡單視圖函數應用的名稱定義為“SimpleView”,具體文件結構如圖4.2所示。
django-admin startproject ViewDjango # 創建項目
cd ViewDjango
django-admin startapp SimpleView # 創建應用
ViewDjango為項目根目錄,SimpleView為具體的應用目錄。
(2)然后定義ViewDjango項目根目錄下的路由文件urls.py,實現到SimpleView應用的路由路徑
【ViewDjango\ViewDjango\urls.py】
from django.contrib import admin
from django.urls import include, path# define URLconf
urlpatterns = [ # 定義ViewDjango項目應用的根URLconf模塊path('simple/', include('SimpleView.urls')), # 通過path()函數定義一個路由路徑'simple/',對應通過include方式包括的SimpleView應用的URLconf模塊'SimpleView.py'path('admin/', admin.site.urls),
]
(3)接下來,定義SimpleDjango應用目錄中的路由文件urls.py
【ViewDjango\SimpleView\urls.py】
#--- SimpleView urls.py ---#from django.urls import include, path
from . import views# define URLconf
urlpatterns = [ # 定義了應用的URLconf模塊path("", views.index, name='index'), # 通過path函數將應用的默認路徑解析為視圖函數views.indexpath("curdatetime/", views.current_datetime), # 通過path函數將路徑curdatetime解析為視圖函數
]
(4)最后,定義SimpleDjango應用中的視圖函數文件views.py
【ViewDjango\SimpleView\view.py】
#--- SimpleView views.py ---#from django.http import HttpResponse
from django.shortcuts import render# Create your default views.def index(request): # 定義默認視圖函數views.indexreturn HttpResponse("Hello, SimpleView App!") # 返回對象文本# Create your datetime views.import datetime # 導入日期和時間類型對象datetimedef current_datetime(request):now = datetime.datetime.now() # 通過時間日期調用now()方法,獲取當前時間html = "<html><body>It is now %s.</body></html>" % now # 定義html,并傳遞當前時間到頁面代碼中return HttpResponse(html) # 返回頁面代碼
(5)測試視圖
運行服務器
python manage.py runserver
瀏覽器訪問:(http://localhost:8000/simple/)
瀏覽器訪問:(http://localhost:8000/simple/curdatetime/)
三、返回錯誤視圖
-
在Django框架中,返回HTTP錯誤代碼的方法非常簡單。
-
HttpResponse類的許多子類對應著一些常用的HTTP狀態碼,比如HTTP 404錯誤對應的HttpResponseNotFound子類,當然這里面不包括200狀態碼(表示“OK”)。
-
Django為了標識一個錯誤,直接返回那些子類中的一個實例,而不是普通的HttpResponse對象。
-
在本小節中,我們通過HttpResponseNotFound子類設計一個返回錯誤視圖的應用,用來模擬返回404錯誤狀態。
(1)首先,將返回錯誤視圖函數應用的名稱定義為“ErrorView”,具體文件結構如圖
django-admin.exe startapp ErrorView
(2)然后,重新定義ViewDjango項目根目錄下的路由文件urls.py,實現到ErrorView應用的路由路徑
【ViewDjango\ViewDjango\urls.py】
from django.contrib import admin
from django.urls import include, path# define URLconf
urlpatterns = [path('simple/', include('SimpleView.urls')),path('error/', include('ErrorView.urls')), # 通過函數新增路由路徑,通過include包括應用的URLconf模塊path('admin/', admin.site.urls),
]
(3)接下來,定義ErrorView應用目錄中的路由文件urls.py
【ViewDjango\ErrorView\urls.py】
#--- ErrorView urls.py ---#from django.urls import include, path
from . import views# define URLConf
urlpatterns = [path("", views.index, name='index'), # 通過path函數將應用默認路徑解析為視圖函數path("pagenotfound/<int:p>/", views.error_view),# 通過path函數將路徑解析為視圖函數,添加一個路由參數,p用于選擇不同的視圖返回值
]
(4)最后,定義ErrorView應用中的視圖函數views.py
【ViewDjango\ErrorView\views.py】
#--- ErrorView views.py ---#from django.http import HttpResponse, HttpResponseNotFound
from django.shortcuts import render# import logging
import logging
# get logger
logger = logging.getLogger('log')# Create your views here.# default view
def index(request): # 定義默認視圖函數return HttpResponse("Hello, ErrorView App!")# error view
def error_view(request, p): # 定義錯誤視圖函數print("p =", p)if p:return HttpResponse("Page not found!")else:return HttpResponseNotFound("HttpResponseNotFound --- Page not found!")
(5)驗證效果
瀏覽器訪問:(http://localhost:8000/error/)
瀏覽器訪問:(http://localhost:8000/error/pagenotfound/1/)
也可以通過瀏覽器控制臺查看一下返回的HTTP狀態碼,顯示為“Status:200 OK”
瀏覽器訪問:(http://localhost:8000/error/pagenotfound/0/)
再通過瀏覽器控制臺查看HTTP狀態碼,顯示為:“Status:404 Not Found”,這說明HttpResponseNotFound子類直接返回了HTTP 404錯誤視圖。