简单视图函数

news2025/4/3 2:44:06

视图函数

文章目录

  • 视图函数
    • @[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错误视图。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2326204.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

蓝桥杯备考----》完全背包模板

其实这个完全背包的步骤和01背包也是差不多滴&#xff0c;不过他有一些优化是我们必须要说一说的 老样子&#xff0c;我们先定义一下状态表示 step1: f[i][j]表示从1到i个物品里选出体积不超过j的最大价值 step2:状态转移方程 写成一行就是 我们再写一下f[i][j-v[i]]的表达…

小白入门机器学习概述

文章目录 一、引言二、机器学习的基础概念1. 机器学习的定义2. 机器学习的类型&#xff08;1&#xff09;监督学习&#xff08;Supervised Learning&#xff09;&#xff08;2&#xff09;无监督学习&#xff08;Unsupervised Learning&#xff09;&#xff08;3&#xff09;半…

微软 GraphRAG 项目学习总结

微软2024年4月份发布了一篇《From Local to Global: A GraphRAG Approach to Query-Focused Summarization》&#xff08;GraphRAG&#xff1a;从局部到全局的查询式摘要方法&#xff09;论文&#xff0c;提出了一种名为GraphRAG的检索增强生成&#xff08;RAG&#xff09;方法…

C# dataGridView 自动生成几行几列及手动输入整型字符

C# dataGridView生成12号4列的表格 private void Form1_Load(object sender, EventArgs e) {// 清除默认列dataGridView1.Columns.Clear();// 添加4列&#xff08;首列为序号列&#xff09;dataGridView1.Columns.Add("ColIndex", "序号");dataGridView1.…

Day17 -实例:利用不同语言不同框架的特征 进行识别

前置&#xff1a;我们所需的web站点&#xff0c;都可以利用fofa去搜索&#xff0c;例如&#xff1a;app"flask"这样的语句去找对应的站点&#xff0c;找到后&#xff0c;我们模拟不知道是什么框架&#xff0c;再根据特征去判断它的框架。 ***利用工具可以再去结合大…

Pycharm(八):字符串切片

一、字符串分片介绍 对操作的对象截取其中一部分的操作&#xff0c;比如想要获取字符串“888666qq.com前面的qq号的时候就可以用切片。 字符串、列表、元组都支持切片操作。 语法&#xff1a;字符串变量名 [起始:结束:步长] 口诀&#xff1a;切片其实很简单&#xff0c;只顾头来…

Mysql从入门到精通day5————子查询精讲

本文主要讲述子查询的几种方法&#xff0c;读者注意体会它们的不同场合的适用情况及功能&#xff0c;本篇文章也融入了小编实践过程遇到的坑&#xff0c;希望读者不要再踩坑 一.带IN关键字的子查询 in关键字可以检测结果集中是否存在某个特定的值&#xff0c;检测成功则执行外…

虫洞数观系列二 | Python+MySQL高效封装:为pandas数据分析铺路

目录 系列文章 1. 引言 2. 常规写法mysql 3. 封装设计接口mysql 3.1dbname.py文件 3.1.1. 导入和基类定义 3.1.2. 具体表定义类 3.1.3. 表定义整合函数 3.1.4. 全局字典和测试代码 3.2mysql_dao文件 3.2.1. 模块导入与配置 3.2.2. 数据库连接池初始化 3.2.3. Comm…

MySQl之Binlog

前言 Binlog&#xff08;Binary Log&#xff09;是MySQL中至关重要的日志模块&#xff0c;它直接关系到数据恢复、主从复制等高阶架构设计。无论你是刚入门的新手还是有一定经验的开发者&#xff0c;掌握Binlog的原理和应用都是进阶的必经之路。 BinLog是什么&#xff1f; Bin…

开源项目解读(https://github.com/zjunlp/DeepKE)

1.DeepKE 是一个开源的知识图谱抽取与构建工具&#xff0c;支持cnSchema、低资源、长篇章、多模态的知识抽取工具&#xff0c;可以基于PyTorch实现命名实体识别、关系抽取和属性抽取功能。同时为初学者提供了文档&#xff0c;在线演示, 论文, 演示文稿和海报。 2.下载对应的de…

「MethodArgumentTypeMismatchException:前端传递 ‘undefined‘ 导致 Integer 类型转换失败」

遇到的问题&#xff1a; Failed to convert value of type java.lang.String to required type java.lang.Integer; nested exception is java.lang.NumberFormatException: For input string: "undefined" 原因分析&#xff1a; 大致意思就是我传递的参数到后端没…

LabVIEW故障诊断数据处理方法

在LabVIEW故障诊断系统中&#xff0c;数据处理直接决定诊断的准确性和效率。工业现场常面临噪声干扰、数据量大、实时性要求高等挑战&#xff0c;需针对性地选择处理方法。本文结合电机故障诊断、轴承损伤检测等典型案例&#xff0c;详解数据预处理、特征提取、模式识别三大核心…

基于 SpringBoot 的火车订票管理系统

收藏关注不迷路&#xff01;&#xff01; &#x1f31f;文末获取源码数据库&#x1f31f; 感兴趣的可以先收藏起来&#xff0c;还有大家在毕设选题&#xff08;免费咨询指导选题&#xff09;&#xff0c;项目以及论文编写等相关问题都可以给我留言咨询&#xff0c;希望帮助更多…

Python的概论

免责声明 如有异议请在评论区友好交流&#xff0c;或者私信 内容纯属个人见解&#xff0c;仅供学习参考 如若从事非法行业请勿食用 如有雷同纯属巧合 版权问题请直接联系本人进行删改 前言 提示&#xff1a;&#xff1a; 提示&#xff1a;以下是本篇文章正文内容&#xff0c…

构建大语言模型应用:句子转换器(Sentence Transformers)(第三部分)

本系列文章目录 简介数据准备句子转换器&#xff08;本文&#xff09;向量数据库搜索与检索大语言模型开源检索增强生成评估大语言模型服务高级检索增强生成 RAG 在之前的博客中&#xff0c;我们学习了为RAG&#xff08;检索增强生成&#xff0c;Retrieval Augmented Generati…

怎样提升大语言模型(LLM)回答准确率

怎样提升大语言模型(LLM)回答准确率 目录 怎样提升大语言模型(LLM)回答准确率激励与规范类知识关联类情感与语境类逆向思维类:为什么不,反面案例群体智慧类明确指令类示例引导类思维引导类约束限制类反馈交互类:对话激励与规范类 给予奖励暗示:在提示词中暗示模型如果回…

【进阶】vscode 中使用 cmake 编译调试 C++ 工程

基于 MSYS2 的 MinGW-w64 GCC 工具链与 CMake 构建系统&#xff0c;结合VSCode及其扩展插件&#xff08; ms-vscode.cmake-tools&#xff09;&#xff0c;可实现高效的全流程C开发调试。既可通过 VSCode 可视化界面&#xff08;命令面板、状态栏按钮&#xff09;便捷完成配置、…

流影---开源网络流量分析平台(三)(管理引擎部署)

目录 前沿 功能介绍 部署过程 前沿 在上一篇文章中&#xff0c;最后因为虚拟机的资源而没看到最后的效果&#xff0c;而是查看了日志&#xff0c;虽然效果是有了&#xff0c;但后来我等了很久&#xff0c;还是那个转圈的画面&#xff0c;所以我猜测可能是少了什么东西&#…

QT Quick(C++)跨平台应用程序项目实战教程 5 — 界面设计

目录 1.版面设计 2. 自定义按钮 2.1 自定义工具栏按钮 2.2 自定义图标按钮 3. 顶部工具栏 4. 主体 5. 底部工具栏 6. 主文件 7. 最终效果 上一章内容讲解了QML基本使用方法。本章内容继续延续“音乐播放器”项目主线&#xff0c;完成程序的界面设计任务。 1.版面设计…

【微服务架构】SpringCloud Alibaba(三):负载均衡 LoadBalance

文章目录 SpringCloud Alibaba1、核心组件2、优势3、应用场景 一、Loadbalance介绍二、Ribbon和Loadbalance 对比三、整合LoadBlance1、升级版本2、移除ribbon依赖&#xff0c;增加loadBalance依赖 四、自定定义负载均衡器五、重试机制六、源码分析1、猜测源码的实现2、初始化过…