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

news2024/11/27 16:49:32

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 detail
        pk: 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_views


urlpatterns = [
    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 name

    def 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 data
            name = 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_views


urlpatterns = [
    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.coloradmin.cn/o/793710.html

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

相关文章

运维高级--shell脚本完成分库分表

为什么要进行分库分表 随着系统的运行&#xff0c;存储的数据量会越来越大&#xff0c;系统的访问的压力也会随之增大&#xff0c;如果一个库中的表数据超过了一定的数量&#xff0c;比如说MySQL中的表数据达到千万级别&#xff0c;就需要考虑进行分库分表&#xff1b; 其…

分享几个电脑录制GIF图片的小工具(附下载链接)

GIF工具 1.GIF1232.ScreentoGif3.gifcam4.LICECAP5.recordit 1.GIF123 点击下载: GIF123 介绍 GIF123&#xff1a;是单文件的绿色软件&#xff0c;无任何外部依赖项&#xff0c;体积仅755KB&#xff0c;支持windows所有版本操作简单&#xff01;&#xff01; 2.ScreentoGif …

梯度提升树的参数

目录 1. 迭代过程 1.1 初始预测结果的设置 1.2 使用回归器完成分类任务 ① 二分类情况 ② 多分类情况 1.3 GBDT的8种损失函数 ① 分类器中的loss a. 二分类交叉熵损失 b. 多分类交叉熵损失 c. 二分类指数损失 d. 多分类指数损失 ② 回归树中的loss a. 平方误差 b…

JPA连接达梦数据库导致auto-ddl失效问题解决

现象&#xff1a; 项目使用了JPA&#xff0c;并且auto-ddl设置的为update&#xff0c;在连接达梦数据库的时候&#xff0c;第一次启动没有问题&#xff0c;但是后面重启就会报错&#xff0c;发现错误为重复建表&#xff0c;也就是说已经建好的表没有检测到&#xff0c;…

spring 的循环依赖以及spring为什么要用三级缓存解决循环依赖

知识铺垫 bean的生命周期 这里简单过一下 class ->无参构造 ->普通对象 ->依赖注入&#xff08;对加了autowire等的属性赋值&#xff09; ->初始化前->初始化 ->初始化后&#xff08;aop&#xff09; ->放入单例池的map&#xff08;一级缓存&#xff09;…

第二次作业 运维高级 MySQL主从复制

1.理解MySQL主从复制原理 1、master&#xff08;binlog dump thread&#xff09;主要负责Master库中有数据更新的时候&#xff0c;会按照binlog格式&#xff0c;将更新的事件类型写入到主库的binlog文件中。 2、I/O thread线程在Slave中创建&#xff0c;该线程用于请求Master&…

有些能力,是工作中学不来的,看看这篇超过90%同行

俗话说:360行&#xff0c;行行转IT。 在就业形势压力巨大的今天&#xff0c;不仅仅是计算机专业的毕业生&#xff0c;很多其他专业的大学生都选择转行从事计算机行业。 尤其是软件测试行业&#xff0c;远远超出其他行业的薪水和广阔的就业前景&#xff0c;吸引了大批应届毕业…

PostgreSQL——Windows上安装PostgreSQL

下载地址&#xff1a;PostgreSQL下载网址 因为某些问题我自己安装的是postgresql-11.2-1-windows-x64 根据下图顺序安装即可&#xff0c;不同版本可能顺序有点区别但每部分目的都是一样的。 首先右键以管理员身份运行&#xff0c;可以弹出安装界面

多通道振动信号经小波变换成多通道信息融合的图像(Python编程)

1.数据集介绍&#xff1a;凯斯西楚大学轴承数据集&#xff08;12KHZ采样频率下&#xff0c;四种不同负载数据集&#xff09; 2.这里以0HP文件夹为例&#xff0c;进行展示&#xff0c;有内圈故障&#xff0c;正常&#xff0c;外圈故障和滚动体故障四个文件夹 内圈故障文件夹下有…

【2023周报】week23 eBPF学习

week23 eBPF学习 如何调试eBPF程序&#xff1f; bpf SystemCall [bpf(2) - Linux manual page (man7.org)](https://man7.org/linux/man-pages/man2/bpf.2.html) [bpf-helpers(7) - Linux manual page (man7.org)](https://man7.org/linux/man-pages/man7/bpf-helpers.7.htm…

Python基本语法之符号使用

好久没有和小伙伴们更新python了&#xff0c;我对于此感到抱歉以后有时间尽量多更新 目录 一. 标识符 A.定义&#xff1a; B.使用特点 C.Python标识符&#xff0c;进一步探讨以下几个方面的详细内容&#xff1a; 1. 规则和约定&#xff1a; 2. 有效的标识符示例&#xff1…

【LeetCode每日一题】——剑指 Offer II 027.回文链表

文章目录 一【题目类别】二【题目难度】三【题目编号】四【题目描述】五【题目示例】六【题目提示】七【题目进阶】八【题目注意】九【解题思路】十【时间频度】十一【代码实现】十二【提交结果】 一【题目类别】 栈 二【题目难度】 简单 三【题目编号】 剑指 Offer II 02…

3.1flex布局

参考链接 MDN 核心组成 容器 容器指定元素item的布局方式 元素 元素自定义自身的宽度大小

高数笔记02:导数、微分、中值定理

图源&#xff1a;文心一言 本文是我学习高等数学第二、三章导数、微分、中值定理的一些笔记和心得&#xff0c;希望可以与考研路上的小伙伴一起努力上岸~~&#x1f95d;&#x1f95d; 第1版&#xff1a;查资料、画导图、归纳题型~&#x1f9e9;&#x1f9e9; 参考用书1&…

Tomcat修改端口号

网上的教程都比较老&#xff0c;今天用tomcat9.0记录一下 conf文件夹下server.xml文件 刚开始改了打红叉的地方&#xff0c;发现没用&#xff0c;改了上面那行

SpringBoot整合第三方 Druid、MybatisPlus、Mybatis

整合第三方技术 整合JUnit Respostory 注解&#xff1a;数据类 1、导入测试对应的starter 2、测试类使用 SpringBootTest 修饰 3、使用自动装配的形式添加要测试的对象 classes的属性 其实主要找的是SpringBootApplication中的SpringBootConfiguration这个注解。也就是配置…

【Axure高保真原型】标准金额格式输入框

今天和大家分享标准金额格式输入框的原型模板&#xff0c;在输入框里输入数字后&#xff0c;会自动将对应的数字转为标准金额格式输入&#xff0c;自动添加千分位&#xff0c;例如输入2000&#xff0c;输入内容为2,000.00。具体效果可以观看下方视频或者打开预览地址体验 【原…

三星发布新智能手表:旋转边框回归,Galaxy Watch6 系列震撼来袭

今晚&#xff0c;三星发布了最新的Galaxy Watch6系列智能手表&#xff0c;其中包括Galaxy Watch6和Watch6 Classic两款。Watch6 Classic再次引入了三星手表所独有的旋转边框特色。这两款手表提供多种尺寸和支持LTE的版本&#xff0c;同时还搭载了内置的eSIM模块&#xff0c;为用…

Cookie简介

Cookie使用场景 在接口测试过程中&#xff0c; 很多情况下&#xff0c;需要发送的请求附带cookies&#xff0c;才能返回正常的结果。所以在使用pythonrequests进行接口自动化测试也是同理&#xff0c; 需要在构造接口测试用例时加入cookie。 传递Cookie的两种方式&#xff1a…

TortoiseSVN-1.14.5.29465-x64-svn-1.14.2的安装包以及汉化包

TortoiseSVN-1.14.5.29465-x64-svn-1.14.2的安装包以及汉化包 为了存一手这个安装包 CSDN资源地址&#xff0c;0积分 https://download.csdn.net/download/lu6545311/88085035 包内内容&#xff0c;一个安装包&#xff0c;一个汉化包 如果你想在你的编辑器&#xff0c;比如v…