您的位置:首页 > 文旅 > 美景 > 大学生网页设计怎么做_网页制作基础教程第二版课后题_南宁做网站公司_青岛seo网站关键词优化

大学生网页设计怎么做_网页制作基础教程第二版课后题_南宁做网站公司_青岛seo网站关键词优化

2025/4/11 15:00:37 来源:https://blog.csdn.net/qq_65998623/article/details/146873539  浏览:    关键词:大学生网页设计怎么做_网页制作基础教程第二版课后题_南宁做网站公司_青岛seo网站关键词优化
大学生网页设计怎么做_网页制作基础教程第二版课后题_南宁做网站公司_青岛seo网站关键词优化

视图函数

文章目录

  • 视图函数
    • @[toc]
    • 一、什么是视图函数
    • 二、简单视图函数
    • 三、返回错误视图
    • 四、直接返回状态码视图
    • 五、HTTP 404异常视图

一、什么是视图函数

  • 所谓视图函数(简称视图),本质上就是一个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错误视图。

在这里插入图片描述

四、直接返回状态码视图

在Django框架中,还支持直接返回HTTP状态码的操作。可以通过向HttpResponse子类的构造器传递HTTP状态码,来创建任何想要的HTTP状态码的返回类。

在本小节中,我们设计一个直接返回HTTP状态码视图的应用,用来模拟返回任意HTTP状态码。
(1)首先,将直接返回状态码视图函数应用的名称定义为StatusView

django-admin.exe startapp StatusView

在这里插入图片描述

(2)然后,重新定义ViewDjango项目根目录下的路由文件urls.py,实现到StatusView应用的路由路径

【ViewDjango\ViewDjango\urls.py】

from django.contrib import admin
from django.urls import include, pathurlpatterns = [path('simple/', include('SimpleView.urls')),path('error/', include('ErrorView.urls')),path('status/', include('StatusView.urls')),	# 新增路径statuspath('admin/', admin.site.urls),
]

(3)接下来,定义StatusView应用目录中的路由文件urls.py

【ViewDjango\StatusView\urls.py】

#---   StatusView urls.py   ---#from django.urls import include, path
from . import views# define URLConf
urlpatterns = [path("", views.index, name='index'),	# 应用默认路径解析为视图函数path("statuscode/<int:scode>/", views.status_code_view),	# 将路径解析为视图函数,添加路由参数
]

(4)最后,定义StatusView应用中的视图函数文件view.py

#---   StatusView views.py   ---#from django.http import HttpResponse
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, StatusView App!")# status code view
def status_code_view(request, scode):print("status coce : ", scode)# Return a http response code.return HttpResponse(status=scode)

(5)验证测试

浏览器访问:(http://127.0.0.1:8000/status/)

在这里插入图片描述

然后,在浏览器中输入StatusView应用直接返回状态码视图的路由地址status/statuscode/201/

打开路由地址后,再通过浏览器控制台查看一下返回的HTTP状态码,显示为“Status:201 Created”,状态码201与URL地址中输入的数值是对应的

在这里插入图片描述

如果觉得状态码201比较常见,不具备一定代表性,那么我们尝试在浏览器中输入路由地址status/statuscode/250/(注意,这里的整型路由参数250不是常见的HTTP状态码)

打开后,再通过浏览器控制台查看一下返回的状态码,状态码250与URL地址中输入的数值是对应的,并且还提示了该状态码为未知的HTTP状态码。

在这里插入图片描述


五、HTTP 404异常视图

在Django框架中,当返回错误(如:HttpResponseNotFound)时,一般需要定义错误页面的HTML模板。
为了方便开发人员开发,Django框架内置了Http404异常(仅定义了该异常,没有类似Http400、Http403等这些异常)。

假如Django代码再视图的任意一个地方引发了Http404异常,那么Django框架就会捕捉到该异常,并且返回标准的错误页面(连同HTTP错误状态代码404)。不过要记住,只有在Django项目设置中将DEBUG参数这只FALSE才能实现上述功能,DEBUG参数默认是设置为TRUE的。

在本小节中,我们设计一个Http404异常视图的应用,用来实现HTTP 404错误的异常捕捉。

(1)首先,将Http404异常视图应用的名称定义为Http404View

django-admin.exe startapp Http404View

在这里插入图片描述

(2)然后,重新定义ViewDjango项目根目录下的路由文件urls.py,实现到Http404View应用的路由路径

【ViewDjango\ViewDjango\urls.py】

from django.contrib import admin
from django.urls import include, pathurlpatterns = [path('simple/', include('SimpleView.urls')),path('error/', include('ErrorView.urls')),path('status/', include('StatusView.urls')),path('http404/', include('Http404View.urls')),path('admin/', admin.site.urls),
]

(3)接下来,定义Http404View应用目录中的路由文件urls.py

#---   Http404View urls.py   ---#from django.urls import include, path
from . import views# define URLconf
urlpatterns = [path("", views.index, name='index'),path("zeroexp/", views.zero_exp),
]

(4)最后,定义Http404View应用中的视图函数文件

【ViewDjango\Http404View\view.py】

#---   Http404View views.py   ---#from django.http import HttpResponse
from django.http import Http404
from django.shortcuts import render# Create your default views.# default view
def index(request):return HttpResponse("Hello, Http404View App!")#  view
def zero_exp(request):try:r = 1 / 0except:raise Http404("1 / 0 does not exist")  # 注意是raise,不是returnreturn render(request, 'template/404.html', {'r': r})

(5)验证测试

浏览器访问:(http://localhost:8000/http404/)

在这里插入图片描述

然后,在浏览器中输入Http404View应用异常视图的路由地址http404/zeroexp/,页面中显示了代码中通过Http404()方法定义的异常信息。

在这里插入图片描述

图中显示的是调试信息,主要是在开发阶段中使用。如果想显示标准的404错误页面,需要在Django项目设置中将DEBUG参数设置为FALSE,以及需要设置的ALLOWED_HOSTS = [‘*’]

在这里插入图片描述

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com