视图函数
文章目录
- 视图函数
- @[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.index
path("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.index
return HttpResponse("Hello, SimpleView App!") # 返回对象文本
# Create your datetime views.
import datetime # 导入日期和时间类型对象datetime
def 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错误视图。