视图(views)

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm=1001.2014.3001.5501

下面通过一个例子讲解在Django项目中定义视图,代码如下:

from django.http import HttpResponse      # 导入响应对象

import datetime                  # 导入时间模块

def current_datetime(request):          # 定义一个视图方法,必须带有请求对象作为参数

    now = datetime.datetime.now()          # 请求的时间

    html = "<html><body>It is now %s.</body></html>" % now  # 生成HTML代码

    return HttpResponse(html)          # 将响应对象返回,数据为生成的HTML代码

上面的代码定义了一个函数,返回了一个HttpResponse对象,这就是Django的FBV(Function-Based View)基于函数的视图。每个视图函数都要有一个HttpRequest对象作为参数,用来接收来自客户端的请求,并且必须返回一个HttpResponse对象,作为响应给客户端。

django.http模块下有诸多继承于HttpReponse的对象,其中大部分在开发中都可以利用到。例如,我们想在查询不到数据时,给客户端一个HTTP 404的错误页面。可以利用django.http下面的Http404对象,代码如下:

from django.shortcuts import render

from django.http import HttpResponse, HttpResponseRedirect, Http404

from app1.forms import PersonForm

from app1.models import Person

def person_detail(request, pk):              # url参数pk

    try:

        p = Person.objects.get(pk=pk)          # 获取Person数据

    except Person.DoesNotExist:

        raise Http404('Person Does Not Exist')      # 获取不到抛出Http404错误页面

    return render(request, 'person_detail.html', {'person': p})  # 返回详细信息视图

在浏览器输入地址“http://127.0.0.1:8000/app1/person_detail/100/”,会抛出异常,效果如图27所示。

图27   定义HTTP 404错误页面

下面讲解一个基于类的视图实例(CBV),基于类的视图非常简单,与基于函数的视图大同小异。首先定义一个类视图,这个类视图需要继承一个基础的类视图,所有的类视图都继承自views.View。类视图的初始化参数需要给出。将上一小节定义的get_name()方法改成基于类的视图,代码如下:

from django.shortcuts import render

from django.http import HttpResponse, HttpResponseRedirect, Http404

from django.views import View

from app1.forms import PersonForm

from app1.models import Person

class PersonFormView(View):

    form_class = PersonForm                  # 定义表单类

    initial = {'key': 'value'}              # 定义表单初始化展示参数

    template_name = 'name.html'              # 定义渲染的模板

    def get(self, request, *args, **kwargs):      # 定义GET请求的方法

        # 渲染表单

        return render(request, self.template_name, {'form': self.form_class(initial=self.initial)})

    def post(self, request, *args, **kwargs):              # 定义POST请求的方法

        form = self.form_class(request.POST)              # 填充表单实例

        if form.is_valid():                          # 判断请求是否有效

            # 使用form.cleaned_data获取请求的数据

            first_name = form.cleaned_data['first_name']

            last_name = form.cleaned_data['last_name']

            # 响应拼接后的字符串

            return HttpResponse(first_name + '' + last_name)      # 返回拼接的字符串

        return render(request, self.template_name, {'form': form})    # 如果表单无效,返回表单

接下来定义一个URL,代码如下:

from django.urls import path

from app1 import views as app1_views

urlpatterns = [

    path('get_name', app1_views.get_name),

    path('get_name1', app1_views.PersonFormView.as_view()),

    path('person_detail/<int:pk>/', app1_views.person_detail),

]

说明:form_class是指定类使用的表单,template_name是指定视图渲染的模板。

在浏览器中请求“/app1/get_name1”,会调用PersonFormViews视图的方法,如图28所示。

图28   请求定义的视图

输入“hugo”和“zhang”,并单击“提交”按钮,效果如图29所示。

图29   请求视图结果

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Idea启动服务报 Command line is too long

一、背景 合不同分支代码后&#xff0c;启动服务报 Error running Application, Command line is too long, Shorten the command line via JAR manifest or via a classpath file and rerun. 没有在意&#xff0c;然后点击了manifest 来进行 二、问题 然后自己在重新启动&…

情绪管理篇:让七情自然流露,不过分压抑也不掺杂极端的想法即可来去自如

情绪管理篇&#xff1a; 人有七情&#xff0c;本属常理&#xff0c;该哭的时候哭、该笑的时候笑、该怒的时候怒、该忧的时候忧 学习圣贤之学&#xff0c;并非让我们像木头人一样&#xff0c;枯木死灰&#xff0c;而要让自己不要被七情所缠缚、被七情所乱心&#xff0c;我们的喜…

最新《pvz植物大战僵尸杂交版》整合安装包,全面支持Android、ios、Windows,附教程!

今天&#xff0c;阿星要聊聊最近全网大火的一款老游戏——《植物大战僵尸》杂交版。 虽然它不是什么3A大作&#xff0c;但在阿星的心里&#xff0c;它永远是那个让人回味无穷的经典。记得十年前&#xff0c;阿星和大多数玩家一样&#xff0c;玩的都是盗版。那时候的《植物大战…

三品PDM电子行业解决方案介绍 电子企业PDM应用效果

随着全球化和技术创新的不断推进&#xff0c;电子行业正经历着前所未有的发展机遇。然而&#xff0c;随之而来的挑战也日益凸显&#xff0c;尤其是在产品数据管理PDM方面。本文将探讨电子行业在PDM方面的需求&#xff0c;并提出相应的解决方案&#xff0c;以帮助企业提升效率和…

项目中eventbus和rabbitmq配置后,不起作用

如下&#xff1a;配置了baseService层和SupplyDemand层得RabbitMQ和EventBus 但是在执行订阅事件时&#xff0c;发送得消息在base项目中没有执行&#xff0c;后来发现是虚拟机使用得不是一个&#xff0c;即上图中得EventBus下得VirtualHost&#xff0c;修改成一直就可以了

Latex学习之“usefont”用法

Latex学习之“\usefont”用法 一、通俗的解释 \usefont 是 LaTeX 中的一个命令&#xff0c;用于在文档中临时改变字体&#xff0c;其基本语法如下&#xff1a; \usefont{字体编码}{字体族}{字体系列}{字体形状}这样看起来好像蛮抽象&#xff0c;你可能以及晕了&#xff0c;什…

警告,恶意域名疯狂外联,原因竟然是……

前言 在某个风和日丽的下午&#xff0c;突然收到客户那边运维发过来的消息说我司的DTA设备在疯狂告警&#xff0c;说存在恶意域名外联&#xff0c;我急忙背上小背包前往客户现场&#xff0c;经过与客户协同排查&#xff0c;最终确定该事件为一起挖矿病毒引起的恶意域名外联事件…

鸿蒙开发系统基础能力:【@ohos.hiTraceChain (分布式跟踪)】

分布式跟踪 本模块提供了端侧业务流程调用链跟踪的打点能力&#xff0c;包括业务流程跟踪的启动、结束、信息埋点等能力。 说明&#xff1a; 本模块首批接口从API version 8开始支持。后续版本的新增接口&#xff0c;采用上角标单独标记接口的起始版本。 导入模块 import hi…

xss初识(xss-lab)

XSS跨站脚本 XSS漏洞概述 XSS被称为跨站脚本攻击&#xff08;Cross-site scripting&#xff09;&#xff0c;由于和CSS&#xff08;Cascading Style Sheets&#xff09; 重名&#xff0c;所以改为XSS。 XSS主要基于javascript语言完成恶意的攻击行为&#xff0c;因为javascri…

C++多线程异步日志实现

使用C11标准&#xff0c;构建了一个方便使用的、轻量化的日志系统。封装线程安全的lockQueue&#xff0c;实现对每条日志添加信息、push到lockQueue中的LogTmp类&#xff0c;实现一个多线程异步的日志系统Logger。 lockqueue.h #pragma once #include <queue> #include…

学期结束如何发布期末成绩?

当期末的试卷最后一张被收起&#xff0c;当教室里的喧嚣逐渐沉寂&#xff0c;学生们的心中充满了对成绩的期待与忐忑。期末成绩&#xff0c;关乎着学生的心情&#xff0c;更关系到他们的未来学习动力。那么&#xff0c;如何在保护学生隐私的同时&#xff0c;高效地公布成绩呢&a…

分享:Khoj:你的全能AI助手

在数字化时代&#xff0c;我们每天都会面对海量的信息&#xff0c;如何高效地管理和检索这些信息&#xff0c;同时提升工作效率&#xff0c;成为了许多人关注的焦点。为此&#xff0c;Khoj应运而生——一个功能强大、灵活多变的个人化AI助手&#xff0c;旨在助力用户轻松驾驭信…

双jdk切换

现在因为业务需求单一jdk8已经不满足日常需求了,以我为例之前用的jdk8,但是最新的一个项目用的是17版本的,没招了就下载配置的一套,需要手动切换用哪个版本的步骤如下 jdk8就自己安装配置吧,这只说在有8的版本上在配置17 1.下载一个17win的包(不下载exe) Java Downloads | O…

使用深度相机D435i+YOLOv8实现物体三维坐标实时显示

一、获取相机内参 下列指令为获取相机内参指令&#xff0c;输入此指令前需要获得相机的深度帧和彩色帧数据。 如何使用vsCode打开intel D435i深度相机 # 获取相机内参 depth_intrinsics depth_frame.profile.as_video_stream_profile().intrinsics color_intrinsics color…

Bootstrap和Bagging算法以及衍生算法

1. Bootstrap算法 实际上就是一种针对小样本的无放回式的抽样方法&#xff0c;通过方差的估计可以构造置信区间。 其核心思想和基本步骤如下&#xff1a;   &#xff08;1&#xff09; 采用重抽样技术从原始样本中抽取一定数量&#xff08;自己给定&#xff09;的样本&#…

Python高压电容导电体和水文椭圆微分

&#x1f3af;要点 &#x1f3af;二维热传导二阶偏微分方程 | &#x1f3af;调和函数和几何图曲率 | &#x1f3af;解潮汐波动方程 | &#x1f3af;解静止基态旋转球体流体运动函数 | &#x1f3af;水文空间插值 | &#x1f3af;流体流动模拟求解器 | &#x1f3af;随机算法解…

网络构建关键技术_1.网络高可用设计

1.网络高可用性概述 随着网络快速发展及应用日益深入&#xff0c;各种核心和增值业务在网络上广泛部署&#xff0c;网络的作用愈来愈凸显出来。即使网络出现短时间中断&#xff0c;都可能对业务带来比较大的影响&#xff0c;甚至给企业造成一定程度的经济损失。因此&#xff0c…

【CT】LeetCode手撕—23. 合并 K 个升序链表

目录 题目1- 思路2- 实现⭐23. 合并 K 个升序链表——题解思路 3- ACM 实现 题目 原题连接&#xff1a;23. 合并 K 个升序链表 1- 思路 模式识别&#xff1a;合并 K 个链表 ——> 优先队列 思路 借助优先队列&#xff0c;每次从 k 个链表中&#xff0c;各取一个元素&…

全球开店7万家,711如何策划极致产品力?

引言&#xff1a;越来越多的中国企业家认识到“极致产品力正成为最重要、最核心的品牌战略&#xff0c;是 21 世纪全球商业的主战场”。 《极致产品力》日本策划方案落地班是一个产品策划实操课程&#xff0c;可以帮助企业找到增长路径、拿到产品方案。 现今&#xff0c;许多中…

分布式数据库垂直分片如何计算?

在复习分布式数据库这一部分时&#xff0c;发现垂直分片较难理解&#xff0c;上网上查找资料&#xff0c;也发现找不到&#xff0c;固在考试结束后将自己的理解记录下来。 垂直分片的计算总体上分为三个步骤;1、属性亲和度矩阵AA的计算&#xff1b;2、聚类亲和度CA矩阵的计算&a…