Django学习笔记-视图(views)的使用

Django中可以使用views进行管理,类似于WPF的MVVM的ViewModel层,也相当于MVC架构的模Controller层。

一、基于函数的视图FBV(Function-Based View)

通过定义一个函数,包含HttpRequest对象作为参数,用来接受客户端请求,然后返回HttpResponse对象做为响应放回给客户端。

1.1 先定义一个模板文件

在template中定义一个模板文件persondetail.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Person Details</title>
</head>
<body>{{ Person }}{{ Person.name }}{{ Person.phone }}
</body>
</html>

1.2 在views.py中创建一个函数person_detail

def person_detail(request: HttpRequest, pk: int):"""Show person detailpk: the primarykey of person."""try:p = Person.objects.get(pk=pk)except Person.DoesNotExist:raise Http404("Person Does Not Exist.")return render(request, "persondetail.html", {"Person": p})

1.3 在urls.py中添加新的url

from django.urls import path, re_path
from serverapp import views as serverapp_viewsurlpatterns = [path('test/2023', serverapp_views.test),        # 精确匹配path('converter/<int:num>', serverapp_views.converter),         # 格式转换re_path(r'^re/(?P<num>[0-9]{1,4})/$', serverapp_views.rematch),         # 正则表达式,通过添加起止符限制匹配,避免中间多级路径后匹配到,造成错误匹配。path('person', serverapp_views.get_person),        # 获取人员信息path('personform', serverapp_views.get_personform),        # 使用表单获取人员信息path('person_detail/<int:pk>', serverapp_views.person_detail)         # 视图演示,展示人员信息
]

1.4 运行软件,在客户端访问

 二、基于类的视图CBV(Class-Based View)

基于类的视图与基于函数的视图大同小异,只不过是使用类代替函数。

2.1 再views.py文件中定义类

class PersonDetailView(View):"""人员信息视图类"""form_class = PersonForm                 # 定义表单类initial = {"key":"value"}               # 定义表单初始值tamplate_name = "personform.html"     # templage file namedef get(self, request: HttpRequest, *args, **kwargs):"""Get method"""# 渲染表单return render(request, self.tamplate_name, {"personform": self.form_class(initial= self.initial)})def post(self, request: HttpRequest, *args, **kwargs):"""POST method"""form = self.form_class(request.POST)if form.is_valid():# get dataname = form.cleaned_data['name']phone = form.cleaned_data['phone']return HttpResponse(f"The peson name is {name}, phone is {phone}")return render(request, self.tamplate_name, {"personform": form})

2.2 注册新的url

from django.urls import path, re_path
from serverapp import views as serverapp_viewsurlpatterns = [path('test/2023', serverapp_views.test),        # 精确匹配path('converter/<int:num>', serverapp_views.converter),         # 格式转换re_path(r'^re/(?P<num>[0-9]{1,4})/$', serverapp_views.rematch),         # 正则表达式,通过添加起止符限制匹配,避免中间多级路径后匹配到,造成错误匹配。path('person', serverapp_views.get_person),        # 获取人员信息path('personform', serverapp_views.get_personform),        # 使用表单获取人员信息path('person_detail/<int:pk>', serverapp_views.person_detail) ,        # 视图演示,展示人员信息path('personformview', serverapp_views.PersonDetailView.as_view())         # 基于类的视图
]

2.3 定义html文件

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>User Name</title>
</head>
<body><!--action 是访问的url--><form action="/serverapp/personformview" method="post">{% csrf_token %}        <!--防止跨域攻击-->{{ personform }}        <!--引用表单,views函数中定义的名称一致--><button type="submit">提交</button></form>
</body>
</html>

2.4 访问服务器

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

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

相关文章

如何提高自己的软件测试水平之bug定位

同学们在面试投简历的时候会经常看到人家公司JD上写的要求之一&#xff0c;如下&#xff1a; 这句话大家不要以为随便写写的&#xff0c;在我工作的十几年过程中起码见过10个以上试用期没过的公司新人&#xff0c;公司在衡量一个测试工程师是否专业的标准之一就是&#xff1a;…

大数据面试题:Kafka怎么保证数据不丢失,不重复?

面试题来源&#xff1a; 《大数据面试题 V4.0》 大数据面试题V3.0&#xff0c;523道题&#xff0c;679页&#xff0c;46w字 可回答&#xff1a;Kafka如何保证生产者不丢失数据&#xff0c;消费者不丢失数据&#xff1f; 参考答案&#xff1a; 存在数据丢失的几种情况 使用…

Linux下在终端输入密码隐藏方法

Linux系统中&#xff0c;如何将在终端输入密码时将密码隐藏&#xff1f; 最近做简单的登录界面时&#xff0c;不做任何操作的话&#xff0c;在终端输入密码的同时也会显示输入的密码是什么&#xff0c;这样对于隐蔽性和使用都有不好的体验。那么我就想到将密码用字符*隐藏起来…

STM32 Flash学习(三)

硬件设计 开机的时候先显示一些提示信息&#xff0c;然后在主循环里面检测两个按键。 其中1个按键WK_UP用来执行写入FLASH的操作&#xff0c;另一个按照KEY0用来执行读出操作。 软件设计 添加了两个文件stmflash.c和stmflash.h。 #include "stmflash.h" #include…

freeswitch的mod_xml_curl模块

概述 freeswitch是一款简单好用的VOIP开源软交换平台。 随着fs服务的增多&#xff0c;每一台fs都需要在后台单独配置&#xff0c;耗时耗力&#xff0c;心力憔悴。 如果有一个集中管理配置的配置中心&#xff0c;统一管理所有fs的配置&#xff0c;并可以实现动态的修改配置就…

自动驾驶地面车辆的雷达里程计:方法与数据集综述

在不同复杂环境中&#xff0c;各种传感器的性能会有所不同。它们各自具有优势和劣势&#xff0c;因此融合多模态数据提供了一种解决方案&#xff0c;可以克服各个传感器单独使用时的限制[90]–[92]。此外&#xff0c;许多讨论的传感器已经广泛应用于自动驾驶领域&#xff0c;因…

PHP 支付宝支付、订阅支付(周期扣款)整理汇总

最近项目中需要使用支付宝的周期扣款&#xff0c;整理一下各种封装方法 APP支付&#xff08;服务端&#xff09; /******************************************************* 调用方法******************************************************/function test_pay(){$isSubscri…

mybatis日志工厂

前言&#xff1a; 如果一个数据库操作&#xff0c;出现异常&#xff0c;我们需要排错&#xff0c;日志就是最好的助手 官方给我们提供了logImpl&#xff1a;指定 MyBatis 所用日志的具体实现&#xff0c;未指定时将自动查找。 默认工厂&#xff1a; 在配置文件里添加&#xf…

深度剖析APP开发中的UI/UX设计

作为一个 UI/UX设计师&#xff0c;除了要关注 UI/UX设计之外&#xff0c;还要掌握移动开发知识&#xff0c;同时在日常工作中也需要对用户体验有一定的认知&#xff0c;在本次分享中&#xff0c;笔者就针对自己在工作中积累的一些经验来进行一个总结&#xff0c;希望能够帮助到…

cartographer发布畸变矫正后的scan数据

实现方式&#xff1a; 模仿源代码&#xff0c;在cartographer_ros写一个函数&#xff0c;以函数指针的方式传入cartographer后端&#xff0c;然后接收矫正后的scan数据&#xff0c;然后按照话题laserScan发布出来。 需要同时发布点云强度信息的&#xff0c;还要自己添加含有强度…

如何连接远程服务器?快解析内内网穿透可以吗?

如今我们迎来了数字化转型的时代&#xff0c;众多企业来为了更好地推动业务的发展&#xff0c;常常需要在公司内部搭建一个远程服务器。然而&#xff0c;对于企业员工来说&#xff0c;在工作过程中经常需要与这个服务器进行互动&#xff0c;而服务器位于公司的局域网中&#xf…

Go重写Redis中间件 - Go实现Redis协议解析器

Go实现Redis协议解析器 Redis网络协议详解 在解决完通信后,下一步就是搞清楚 Redis 的协议-RESP协议,其实就是一套类似JSON、Protocol Buffers的序列化协议,也就是我们的客户端和服务端通信的协议 RESP定义了5种格式 简单字符串(Simple String) : 服务器用来返回简单的结…

简述IO(BIO NIO IO多路复用)

在unix网络变成中的五种IO模型: Blocking IO(阻塞IO) NoneBlocking IO (非阻塞IO) IO mulitplexing(IO多路复用) signal driven IO (信号驱动IO) asynchronous IO (异步IO) BIO BIO&#xff08;Blocking IO&#xff09;是一种阻塞IO模型&#xff0c;也是传统的IO操作模型之一…

Windows上安装和使用git到gitoschina和github上_亲测

Windows上安装和使用git到gitoschina和github上_亲测 git介绍与在windows上安装创建SSHkey在gitoschina使用 【git介绍与在windows上安装】 Git是一款免费、开源的分布式版本控制系统&#xff0c;用于敏捷高效地处理任何或小或大的项目。 相关介绍可以参考 <百度百科>…

【Vue3 + Element Plus】纯前端实现本地数据分页

先附上效果图 Vue3 Element Plus 实现本地分页 首页弹窗代码 <el-table :data"tableData" style"width: 100%" border stripe><el-table-column v-for"{ id, prop, label } in tableColumn" :prop"prop" :key"id"…

RocketMQ概论

目录 前言&#xff1a; 1.概述 2.下载安装、集群搭建 3.消息模型 4.如何保证吞吐量 4.1.消息存储 4.1.1顺序读写 4.1.2.异步刷盘 4.1.3.零拷贝 4.2.网络传输 前言&#xff1a; RocketMQ的代码示例在安装目录下有全套详细demo&#xff0c;所以本文不侧重于讲API这种死…

【Rust 基础篇】Rust默认泛型参数:简化泛型使用

导言 Rust是一种以安全性和高效性著称的系统级编程语言&#xff0c;其设计哲学是在不损失性能的前提下&#xff0c;保障代码的内存安全和线程安全。在Rust中&#xff0c;泛型是一种非常重要的特性&#xff0c;它允许我们编写一种可以在多种数据类型上进行抽象的代码。然而&…

tcp keepalive

tcp keepalive用于检查两者之间的链路是否正常&#xff0c;或防止链路断开。 一旦建立了TCP连接&#xff0c;该连接被定义为有效&#xff0c;直到一方关闭它。一旦连接进入连接状态&#xff0c;它将无限期地保持连接状态。但实际上&#xff0c;这种联系不会无限期地持续下去。如…

数据结构:快速的Redis有哪些慢操作?

redis 为什么要这莫快&#xff1f;一个就是他是基于内存的&#xff0c;另外一个就是他是他的数据结构 说到这儿&#xff0c;你肯定会说&#xff1a;“这个我知道&#xff0c;不就是 String&#xff08;字符串&#xff09;、List&#xff08;列表&#xff09;、 Hash&#xff08…

1.Ansible

文章目录 Ansible概念作用特性总结 部署AnsibleAnsible模块commandshellcronusergroupcopyfilehostnamepingyumserice/systemdscriptmountarchiveunarchivereplacesetup inventory主机清单主机变量组变量组嵌套 Ansible 概念 Ansible是一个基于Python开发的配置管理和应用部署…