当前位置: 首页 > news >正文

【Django】从零开始学Django【2】

五. CBV视图

Django植入了视图类这一功能,该功能封装了视图开发常用的代码,无须编写大量代码即可快速完成数据视图的开发,这种以类的形式实现响应与请求处理称为CBV(Class Base Views)。
在这里插入图片描述

1. 数据显示视图

数据显示视图是将后台的数据展示在网页上,数据主要来自模型,一共定义了4个视图类,分别是RedirectView、TemplateView、ListView和DetailView

●RedirectView用于实现HTTP重定向,默认情况下只定义GET请求的处理方法。
●TemplateView是视图类的基础视图,可将数据传递给HTML模板,默认情况下只定义GET请求的处理方法。
●ListView是在TemplateView的基础上将数据以列表显示,通常将某个数据表的数据以列表表示。
●DetailView是在TemplateView的基础上将数据详细显示,通常获取数据表的单条数据。

重定向视图 RedirectView

视图类RedirectView用于实现HTTP重定向功能,即网页跳转功能

下面代码演示:

定义路由的时候,若使用视图类turnTo处理HTTP请求,则需要对视图类turnTo使用as_view()方法,这是对视图类turnTo进行实例化处理

# index的urls.py
from django.urls import path
from .views import *
urlpatterns = [# 定义首页的路由path('', index, name='index'),path('turnTo', turnTo.as_view(), name='turnTo'),
]
# index的views.py
from django.shortcuts import render,redirect,reverse
from django.http import HttpResponse,Http404
from django.views.generic.base import RedirectViewdef index(request):return render(request,'index.html')class turnTo(RedirectView):# 设置属性permanent=False  # 状态码为302url = None  # 重定向的路由地址pattern_name = 'index:index'query_string = True#重写 get_redirect_urldef get_redirect_url(self, *args, **kwargs):print("This is get_redirect_url")return super().get_redirect_url(*args, **kwargs)# 重写getdef get(self,request,*args,**kwargs):print(request.META.get('HTTP_USER_AGENT'))return super().get(request,*args,**kwargs)
<!DOCTYPE html>
<html>
<body>
<h3>Hello RedirectView</h3>
<a href="{% url 'index:turnTo' %}?k=1">Toturn</a></body>
</html>

在这里插入图片描述

在这里插入图片描述

基础视图 TemplateView

代码如下:

# index的views.py
from django.shortcuts import render,redirect,reverse
from django.http import HttpResponse,Http404
from django.views.generic.base import TemplateViewclass index(TemplateView):template_name = 'index.html'template_engine = Nonecontent_type = Noneextra_context = {'title': 'This is GET'}# 重新定义模板上下文的获取方式def get_context_data(self, **kwargs):context = super().get_context_data(**kwargs)context['value'] = 'I am MyDjango'return context# 定义HTTP 的POST请求的处理方法# 参数 request 代表 HTTP 请求信息def post(self,request,*args,**kwargs):self.extra_context = {'title':'This is POST'}context = self.get_context_data(**kwargs)return self.render_to_response(context)

get_context_data()方法用于获取模板上下文内容,模板上下文是将视图里的数据传递到模板文件,再由模板引擎将数据转换成HTML网页数据。

自定义POST请求的处理方法,当触发POST请求时,将会重设属性extra_context的值,并调用get_context_data()将属性extra_context重新写入,从而实现动态改变模板上下文的数据内容

●extra_context:为模板文件的上下文(模板变量)设置变量值,可将数据转换成网页数据展示在浏览器上。
●get_context_data():继承并重写视图类TemplateView的类方法,在变量context里新增数据value。

# index的urls.py
from django.urls import path
from .views import *
urlpatterns = [# 定义首页的路由path('', index.as_view(), name='index'),]
<!DOCTYPE html>
<html>
<body>
<h3>Hello,{{ title }}</h3>
<div>{{ value }}</div>
<br><form action="" method="post">{% csrf_token %}<input type="submit" value="Submit">
</form></body>
</html>

在这里插入图片描述
在这里插入图片描述

列表视图ListView

ListView,该视图类是将数据表的数据以列表的形式显示,常用于数据的查询和展示。

由于视图类ListView需要使用模型对象,因此在MyDjango项目里定义PersonInfo模型,在index的models.py中编写以下代码:

# index的models.py
from django.db import models
class PersonInfo(models.Model):id = models.AutoField(primary_key=True)name = models.CharField(max_length=20)age = models.IntegerField()

在数据库里生成相应的数据表:

首先在Pycharm里面连接数据库:
这里以SQL Server为例子:
SQLServer配置教程

数据库连接比较麻烦:

django连接sqlserver:

pip install mssql-django==1.2
pip install pyodbc django-pyodbc-azure

还要配置setting.py:
红色部分自己修改:
在这里插入图片描述

在终端输入:

# 根据models.py生成相关的.py文件,该文件用于创建数据表
python manage.py makemigrations# 创建数据表
python manage.py migrate

在这里插入图片描述
然后打开数据库,记得刷新!!!

在这里插入图片描述
成功!!!

然后编辑index_personinfo:
在这里插入图片描述

当指令执行完成后,Django会默认创建多个数据表,其中数据表index_personinfo对应index的models.py中所定义的PersonInfo类,其余的数据表都是Django内置的功能所生成的,主要用于Admin站点、用户认证和Session会话等功能。

代码如下:

# index的views.pyfrom django.views.generic import ListView
from .models import PersonInfoclass index(ListView):# 设置模板文件template_name = 'index.html'# 设置模板外的数据extra_context = {'title':'人员信息表'}# 查询模型queryset = PersonInfo.objects.all()# 每页展示一条数据paginate_by = 1# 若不设置,则上下文默认为personinfo_list# context_object_name = 'personinfo'
<!DOCTYPE html>
<html>
<head><title>{{ title }}</title>
</head>
<body>
<h3>{{ title }}</h3>
<table border="1">{% for i in personinfo_list %}<tr><th>{{ i.name }}</th><th>{{ i.age }}</th></tr>{% endfor %}
</table>
<br>
{% if is_paginated %}
<div class="pagination">
<span class="page-links">{% if page_obj.has_previous %}<a href="/?page={{ page_obj.previous_page_number }}">上一页</a>{% endif %}{% if page_obj.has_next %}<a href="/?page={{ page_obj.next_page_number }}">下一页</a>{% endif %}
<br>
<br>
<span class="page-current">第{{ page_obj.number }}页,共{{ page_obj.paginator.num_pages }}页。
</span></span></div>{% endif %}
</body>
</html>

在这里插入图片描述

详细视图DetailView

视图类DetailView的属性pk_url_kwarg和slug_url_kwarg用于确定模型的查询条件;属性slug_field用于确定模型的查询字段;属性query_pk_and_slug用于确定模型主键和其他字段的组合查询。

沿用之前的models,编写以下代码:

# index的urls.py
from django.urls import path
from .views import *
urlpatterns = [# 定义首页的路由path('<pk>/<age>.html', index.as_view(), name='index'),]
# index的views.pyfrom django.views.generic import DetailView
from .models import PersonInfoclass index(DetailView):# 设置模板文件template_name = 'index.html'# 设置模板外的数据extra_context = {'title':'人员信息表'}# 设置模型的查询字段slug_field = 'age'# 设置路由的变量名,与属性slug_field 实现模型的查询功能slug_url_kwarg = 'age'pk_url_kwarg = 'pk'# 设置查询模型model = PersonInfo# 属性queryset 可以做简单的查询操作queryset = PersonInfo.objects.all()# 若不设置则模板上下文默认为'personinfo'# context_object_name = 'personinfo'# 是否将pk和slug作为查询条件query_pk_and_slug = True  #属性query_pk_and_slug用于确定模型主键和其他字段的组合查询
<!DOCTYPE html>
<html>
<head><title>{{ title }}</title>
</head>
<body>
<h3>{{ title }}</h3>
<table border="1"><tr><th>{{ personinfo.name }}</th><th>{{ personinfo.age }}</th></tr>
</table>
<br></body>
</html>

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

2. 数据操作视图

数据操作视图有4个视图类,分别是FormView、CreateView、UpdateView和DeleteView

●FormView视图类使用内置的表单功能,通过表单实现数据验证、响应输出等功能,用于显示表单数据。
●CreateView实现模型的数据新增功能,通过内置的表单功能实现数据新增。
●UpdateView实现模型的数据修改功能,通过内置的表单功能实现数据修改。
●DeleteView实现模型的数据删除功能,通过内置的表单功能实现数据删除。

3. 日期筛选视图

日期筛选视图是根据模型里的某个日期字段进行数据筛选,然后将符合结果的数据以一定的形式显示在网页上。简单来说,就是在列表视图ListView或详细视图DetailView的基础上增加日期筛选所实现的视图类。

六. 模板

1. Django模板引擎

Django内置的模板引擎包含模板上下文(亦可称为模板变量)、标签和过滤器

模板上下文

{{ variable }}表示,variable是上下文的名称,它支持Python所有的数据类型,如字典、列表、元组、字符串、整型或实例化对象等

例如:

# 假如variable1 = '字符串或整型'
<div>{{ variable1 }}</div>
# 输出“<div>字符串或整型</div>”
# 假如variable2={'name': '字典或实例化对象'}
<div>{{ variable2.name }}</div>
# 输出“<div>字典或实例化对象</div>”
# 假如variable3 = ['元组或列表']
<div>{{ variable3.0 }}</div>
# 输出“<div>元组或列表</div>

如果视图没有为模板上下文传递数据或者模板上下文的某个属性、索引下标不存在,Django就会将其设为空值

自定义标签

标签是对模板上下文进行控制输出,它是以{% tag%}表示的,其中tag是标签的名称,Django内置了许多模板标签,比如{% if %}(判断标签){% for %}(循环标签){% url %}(路由标签)

例如:

# for标签,支持嵌套,myList可为列表、元组或某个对象
# item可自定义命名,代表当前循环的数据对象
# {% endfor %}是循环区域终止符,代表这区域的代码由标签for输出
{% for item in myList %}
{{ item }}
{% endfor %}
# if标签,支持嵌套
# 判断条件符与上下文之间使用空格隔开,否则程序会抛出异常
# {% endif %}与{% endfor %}的作用是相同的
{% if name == "Lily" %}
{{ name }}
{% elif name == "Lucy" %}
{{ name }}
{% else %}
{{ name }}
{% endif %}
# url标签
# 生成不带变量的URL地址
<a href="{% url 'index' %}">首页</a>
# 生成带变量的URL地址
<a href="{% url 'page' 1 %}">1</a>
# with标签,与Python的with语法的功能相同
# total=number无须空格隔开,否则抛出异常
{% with total=number %}
{{ total }}
{% endwith %}
# load标签,导入静态文件标签库staticfiles
# staticfiles来自settings.py的INSTALLED_APPS
{% load staticfiles %}
# static标签,来自静态文件标签库staticfiles
{% static "css/index.css" %}

在这里插入图片描述
for标签的模板说明:
在这里插入图片描述

{% for name in name_list %}
{% if forloop.counter == 1 %}
<span>这是第一次循环</span>
{% elif forloop.last %}
<span>这是最后一次循环</span>
{% else %}
<span>本次循环次数为:{{forloop.counter }}</span>
{% endif %}
{% endfor %}

相关文章:

【Django】从零开始学Django【2】

五. CBV视图 Django植入了视图类这一功能&#xff0c;该功能封装了视图开发常用的代码&#xff0c;无须编写大量代码即可快速完成数据视图的开发&#xff0c;这种以类的形式实现响应与请求处理称为CBV(Class Base Views)。 1. 数据显示视图 数据显示视图是将后台的数据展示…...

【leetcode--383赎金信(使用Counter一行代码结束战斗)】

magazine中的字母组成一封赎金信&#xff0c;一个字母只能被用一次&#xff0c;看是否能完成制定赎金信 灵神思路&#xff1a;使用python内置Counter def canConstruct(self, ransomNote: str, magazine: str) -> bool:return Counter(ransomNote) < Counter(magazine) …...

pdf打开方式怎么设置默认?分享这几种设置方法

pdf打开方式怎么设置默认&#xff1f;你是否曾遇到过打开PDF文档时&#xff0c;默认的打开程序并非你所需要的&#xff0c;从而影响了工作效率&#xff1f;别担心&#xff0c;本文将为你详细解读如何设置PDF的默认打开方式&#xff0c;让你的工作更加高效便捷。 首先&#xff0…...

杂谈|RestFul和http的区别

前言 今天和我一组的小伙伴&#xff0c;在对接一个接口时&#xff0c;客户将DELETED请求设置了body参数&#xff0c;导致一个功能反复搞了半天&#xff0c;今天就来说下这两者的区别 1.HTTP概述 HTTP&#xff08;HyperText Transfer Protocol&#xff09;是一种用于从WWW&…...

Nginx的Sub模块

Nginx 是一款高性能的 Web 服务器和反向代理服务器,其灵活的模块化设计使其成为许多开发者和运维人员的首选。其中,Sub 模块作为 Nginx 的一部分,提供了强大的字符串替换和正则匹配功能,本文将深入探讨 Sub 模块的用途、示例以及使用中需要注意的事项。 1. Sub 模块的用途…...

使用大模型做应用的一些问题

使用了一段时间的大模型应用&#xff0c;遇到一些问题&#xff0c;分享给大家。 使用大模型的基本情况 使用了下面三种大模型&#xff1a; 百度 ERNIE-3 kimi 大模型 chatGPT3.5 使用的大模型应用架构&#xff1a; langchainlangchain RAGlangchain Agentvector 数据…...

2024 前端面试每日1小时

三日 1. 如何理解Vue的模板编译原理 Vue的模板编译实际就是将模板字符串通过解析、优化和代码生成等步骤转换为渲染函数的过程。这个过程中&#xff0c;AST扮演了非常重要的角色&#xff0c;它用树形结构描述了模板的内容和结构&#xff0c;是编译过程的核心数据结构&#xff…...

2024.05.22学习记录

1、面经复习&#xff1a; Vue组件通讯、vuex、js严格模式、options请求、vue3 Setup 语法糖、React hook 2、代码随想录刷题&#xff1a;动态规划 3、rosebush组件库 完成Alert和Alert测试 Menu组件初步开发...

Redis与数据库同步指南:订阅Binlog实现数据一致性

本文作者:小米,一个热爱技术分享的29岁程序员。如果你喜欢我的文章,欢迎关注我的微信公众号“软件求生”,获取更多技术干货! 大家好,我是29岁的小米,一名积极活泼、热爱分享技术的开发者。今天,我们来聊聊分布式系统中的一个重要话题——分布式一致性,特别是数据库和R…...

Spring MVC+mybatis 项目入门:旅游网(二) dispatcher与controller与Spring MVC

个人博客&#xff1a;Spring MVCmybatis 项目入门:旅游网&#xff08;二&#xff09;dispatcher与controller与Spring MVC | iwtss blog 先看这个&#xff01; 这是18年的文章&#xff0c;回收站里恢复的&#xff0c;现阶段看基本是没有参考意义的&#xff0c;技术老旧脱离时代…...

深入了解数据库与Java数据类型映射

在数据库开发和Java编程中&#xff0c;理解不同数据类型之间的映射关系对于开发高效且可靠的应用程序至关重要。数据库和Java都有各自的一套数据类型系统&#xff0c;能够正确地映射这些数据类型有助于避免数据丢失、性能问题以及其他潜在的错误。本文将详细探讨常见的数据库数…...

深刻解析 volatile 关键字和线程本地存储ThreadLocal

1.volatile关键字在Java多线程编程中的重要性 在多线程编程中&#xff0c;volatile关键字扮演着至关重要的角色&#xff0c;它确保了变量在多个线程间的可见性&#xff0c;并且能防止指令重排序&#xff0c;从而达到线程安全的目的。 1.1 保证多线程环境下变量的可见性 在Ja…...

羧甲基纤维素钠(CMC-Na)市场规模不断增长 我国生产企业众多

羧甲基纤维素钠&#xff08;CMC-Na&#xff09;市场规模不断增长 我国生产企业众多 羧甲基纤维素钠&#xff08;CMC-Na&#xff09;又称CMC-钠&#xff0c;化学式为[C6H7O2&#xff08;OH&#xff09;2OCH2COONa]n&#xff0c;是一种离子型纤维素醚。CMC-Na外观呈白色颗粒状或纤…...

网红郭有才是怎么火起来的

网红郭有才的爆火主要归因于以下几个因素&#xff1a; 独特的个人魅力与风格&#xff1a;郭有才以其地道的乡土气息和个人的朴实无华赢得了观众的喜爱。他的视频内容展现了真实且接地气的生活场景&#xff0c;给人以亲切感。同时&#xff0c;他的幽默感也是吸引观众的一个重要因…...

小米8SE刷root(面具)

首先准备好一根数据线&#xff0c;一部小米8SE手机&#xff0c;和一台电脑 接下来需要的软件我会给出链接和使用方法&#xff0c;以及分享我遇到的困难和解决方案 下面操作不会的&#xff0c;可以参考这个博主的教程&#xff0c;我也是跟着这个教程刷好的 第一步解锁BL 开启开…...

如果创办Google

本文是一篇演讲稿&#xff0c;来自于《黑客与画家》一书的作者保罗*格雷厄姆&#xff0c;被称为硅谷创业之父。这是他为14至15岁的孩子们做的一次演讲&#xff0c;内容是关于如果他们将来想创立一家创业公司&#xff0c;现在应该做些什么。很多学校认为应该向学生们传授一些有关…...

邦芒职场:揭秘影响你职场收入的九大细节

在职场这个大舞台上&#xff0c;微小的细节往往能决定你收入的多少。以下九大细节&#xff0c;是你职场成功的关键&#xff0c;不容忽视。 1. 形象塑造 在这个注重第一印象的时代&#xff0c;良好的形象是你的第一张名片。精致的妆容、得体的着装&#xff0c;不仅能为你加分&a…...

Petalinux 制作ZYNQ镜像文件流程

1概述 在Zynq-7000 SoC中搭建运行Linux&#xff0c;嵌入式软件栈。 处理器系统引导是一个分两个阶段的过程。第一个阶段是一个内部 BootROM&#xff0c;它存储 stage-0 的引导代码。BootROM 在 CPU 0 上执行&#xff0c;CPU 1 执行等待事件&#xff08;WFE&#xff09;指令。…...

99%的人都不知道,微信才是真正的学习神器

微信&#xff0c;作为一款全球最受欢迎的社交应用之一&#xff0c;除了聊天、朋友圈、小程序等功能外&#xff0c;还有许多隐藏的学习功能&#xff0c;今天小编就给大家分享10个微信隐藏的学习功能&#xff0c;助您轻松成为学霸。 1、微信笔记 用过代办清单软件的朋友都知道&…...

加速模型训练 GPU cudnn

GPU的使用 在定义模型时&#xff0c;如果没有特定的GPU设置&#xff0c;会使用 torch.nn.DataParallel 将模型并行化&#xff0c;充分利用多GPU的性能&#xff0c;这在加速训练上有显著影响。 model torch.nn.DataParallel(model).cuda() cudnn 的配置&#xff1a; cudnn.…...

Java的迪米特原则介绍

01.问题思考的分析什么是迪米特原则&#xff0c;这个原则如何理解&#xff0c;如何运用到实际开发&#xff0c;举例说明一下&#xff1f;什么是高内聚松耦合&#xff0c;能否举例说明一下&#xff1f;迪米特法则。尽管它不像 SOLID、KISS、DRY 原则那样&#xff0c;人尽皆知&am…...

WinForms界面美化:用SunnyUI的UILight控件做个状态指示灯(附完整代码)

WinForms界面美化实战&#xff1a;用SunnyUI的UILight控件打造专业状态指示灯 在桌面应用开发中&#xff0c;状态指示是用户界面不可或缺的元素。传统的WinForms控件往往显得单调乏味&#xff0c;而SunnyUI的UILight控件为我们提供了一种简单高效的解决方案。这个圆形指示灯控…...

从IDEA到K8s:飞算JavaAI如何打通微服务开发的“最后一公里”

云原生时代的一站式开发革命&#xff1a;当JavaAI遇上Kubernetes 在数字化转型的浪潮中&#xff0c;微服务架构已成为企业技术栈的标配&#xff0c;但随之而来的开发复杂度却让许多团队陷入"最后一公里"困境。传统开发流程中&#xff0c;从本地编码到云端部署需要跨…...

华硕笔记本终极优化指南:用GHelper彻底释放硬件潜能

华硕笔记本终极优化指南&#xff1a;用GHelper彻底释放硬件潜能 【免费下载链接】g-helper Lightweight, open-source control tool for ASUS laptops and ROG Ally. Manage performance modes, fans, GPU, battery, and RGB lighting across Zephyrus, Flow, TUF, Strix, Scar…...

当创意遭遇围墙:AO3镜像站的破局与共建指南

当创意遭遇围墙&#xff1a;AO3镜像站的破局与共建指南 【免费下载链接】AO3-Mirror-Site 项目地址: https://gitcode.com/gh_mirrors/ao/AO3-Mirror-Site 问题象限&#xff1a;当同人爱好者遇上访问壁垒 解读创作自由的数字鸿沟 想象这样一个场景&#xff1a;深夜的…...

OnmyojiAutoScript:阴阳师智能自动化脚本完全指南

OnmyojiAutoScript&#xff1a;阴阳师智能自动化脚本完全指南 【免费下载链接】OnmyojiAutoScript Onmyoji Auto Script | 阴阳师脚本 项目地址: https://gitcode.com/gh_mirrors/on/OnmyojiAutoScript 还在为阴阳师每日重复任务感到疲惫吗&#xff1f;每天花费数小时在…...

【独家首发】CPython官方GIL移除路线图深度解读(附内部邮件泄露+性能基准测试数据),错过再等十年

第一章&#xff1a;Python无锁GIL环境下的并发模型演进全景Python长期以来受全局解释器锁&#xff08;GIL&#xff09;制约&#xff0c;导致多线程无法真正并行执行CPU密集型任务。近年来&#xff0c;随着CPython 3.12正式引入实验性无GIL构建选项&#xff08;通过--without-py…...

工业控制C++安全生命周期管理缺失的5个致命断点(某汽车电池BMS项目因第4点导致ASIL-B降级,完整V模型追溯报告首次公开)

第一章&#xff1a;工业控制C安全生命周期管理缺失的5个致命断点&#xff08;某汽车电池BMS项目因第4点导致ASIL-B降级&#xff0c;完整V模型追溯报告首次公开&#xff09; 在高完整性工业控制系统中&#xff0c;C代码的安全生命周期管理远非“编译通过即交付”。某头部车企BMS…...

Tao-8k本地部署详解:基于Ubuntu系统的环境配置与优化

Tao-8k本地部署详解&#xff1a;基于Ubuntu系统的环境配置与优化 最近有不少朋友在问&#xff0c;怎么在自己的GPU服务器上把Tao-8k这个大家伙跑起来。说实话&#xff0c;第一次部署的时候我也踩了不少坑&#xff0c;从驱动版本不对到端口被占&#xff0c;各种小问题层出不穷。…...

Comsol 热 - 流 - 固 - 损伤耦合模拟分析:THMD 模型实践

Comsol热-流-固-损伤耦合模拟分析&#xff0c;THMD热-流-固-损伤耦合模型&#xff0c;在这个模型里面考虑了温度场、应力场、压力场和损伤场&#xff0c;采用的是Comsol内置的接口建模 整个模型呈正方形&#xff0c;内部开一个圆孔 在圆孔内壁施加高压低温流体&#xff0c;模型…...