简单视图函数

视图函数

### 文章目录

  • [视图函数](#文章目录 视图函数 @[toc] 一、什么是视图函数 二、简单视图函数 三、返回错误视图)
  • [@[toc]](#文章目录 视图函数 @[toc] 一、什么是视图函数 二、简单视图函数 三、返回错误视图)
  • [一、什么是视图函数](#文章目录 视图函数 @[toc] 一、什么是视图函数 二、简单视图函数 三、返回错误视图)
  • [二、简单视图函数](#文章目录 视图函数 @[toc] 一、什么是视图函数 二、简单视图函数 三、返回错误视图)
  • [三、返回错误视图](#文章目录 视图函数 @[toc] 一、什么是视图函数 二、简单视图函数 三、返回错误视图)

一、什么是视图函数

  • 所谓视图函数(简称视图),本质上就是一个Python函数,用于接收Web请求并且返回Web响应。
  • Web响应可以包含很多类型,比如常见的HTML网页、重定向和404错误,也可以是XML文档和图像文件等。另外,无论视图函数的具体处理逻辑如何定义,建议都返回某种类型的Web响应。
  • 视图函数的代码可以写在项目的任何Python目录下。但是,对于基于Django框架的Web项目而言,通常约定将视图函数写在项目或应用目录下名称为views.py的文件中。

二、简单视图函数

这里设计一个基于Django框架的Web应用项目,实现了将当前日期和时间编码为HTML文档进行返回的简单视图函数。

(1)首先,将该Web项目应用的名称定义为"ViewDjango",实现返回当前日期和时间的简单视图函数应用的名称定义为"SimpleView",具体文件结构如图4.2所示。

text 复制代码
django-admin startproject ViewDjango	# 创建项目
cd ViewDjango
django-admin startapp SimpleView		# 创建应用

ViewDjango为项目根目录,SimpleView为具体的应用目录。

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

【ViewDjango\ViewDjango\urls.py】

python 复制代码
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】

python 复制代码
#---   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】

python 复制代码
#---   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)测试视图

运行服务器

bash 复制代码
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",具体文件结构如图

bash 复制代码
django-admin.exe startapp ErrorView

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

【ViewDjango\ViewDjango\urls.py】

python 复制代码
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】

python 复制代码
#---   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】

python 复制代码
#---   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错误视图。

相关推荐
@_猿来如此2 小时前
Django 实现电影推荐系统:从搭建到功能完善(附源码)
数据库·后端·python·django
noravinsc7 小时前
django filter 排除字段
后端·python·django
noravinsc8 小时前
django admin 设置字段不可编辑
django·filter·count·models
noravinsc8 小时前
django filter 日期大于当前日期的
python·django
noravinsc10 小时前
django admin 去掉新增 删除
python·django·sqlite
懵逼的小黑子14 小时前
解释两个 Django 命令 makemigrations和migrate
数据库·django
咖啡调调。20 小时前
使用Django框架表单
后端·python·django
Jamesvalley1 天前
【Django】新增字段后兼容旧接口 This field is required
后端·python·django
声声codeGrandMaster1 天前
django之账号管理功能
数据库·后端·python·django
noravinsc1 天前
django admin 添加自定义页面
django·自定义·admin