django从入门到实战(三)——CBV视图介绍

server/2024/11/19 11:45:59/

在 Django 中,不同类型的视图(如数据显示视图、数据操作视图和日期筛选视图)都有各自的方法和参数。以下是对这些视图及其方法的详细介绍。

1. 数据显示视图

1.1 重定向视图

方法

  • redirect(): 用于重定向到另一个 URL。

使用示例

from django.shortcuts import redirectdef my_view(request):# 处理某些逻辑return redirect('home')  # 重定向到首页

参数

  • to: 可以是 URL 字符串、URL 名称或一个可调用对象。
  • permanent: 布尔值,指示是否进行永久重定向(默认值为 False)。
1.2 基础视图

方法

  • HttpResponse(): 返回简单的文本或 HTML 内容。

使用示例

from django.http import HttpResponsedef basic_view(request):return HttpResponse("这是一个基础视图")

参数

  • content: 响应内容(字符串)。
  • status: HTTP 状态码(默认值为 200)。
  • content_type: 响应内容类型(如 text/html)。
1.3 列表视图

方法

  • get_queryset(): 返回要显示的对象列表。
  • get_context_data(): 返回上下文数据。

使用示例

from django.views.generic import ListView
from .models import Postclass PostListView(ListView):model = Posttemplate_name = 'post_list.html'context_object_name = 'posts'def get_queryset(self):return Post.objects.filter(published=True)  # 只显示已发布的帖子

参数

  • model: 关联的模型类。
  • template_name: 使用的模板名称。
  • context_object_name: 上下文变量名称(默认为 object_list)。
1.4 详细视图

方法

  • get_object(): 返回要显示的对象。
  • get_context_data(): 返回上下文数据。

使用示例

from django.views.generic import DetailView
from .models import Postclass PostDetailView(DetailView):model = Posttemplate_name = 'post_detail.html'context_object_name = 'post'def get_object(self):return super().get_object()  # 获取当前帖子对象

参数

  • model: 关联的模型类。
  • template_name: 使用的模板名称。
  • context_object_name: 上下文变量名称(默认为 object)。

2. 数据操作视图

2.1 表单视图

方法

  • form_valid(): 处理有效表单提交。
  • form_invalid(): 处理无效表单提交。
  • get_form(): 获取表单实例。

使用示例

from django.views.generic.edit import FormView
from .forms import PostFormclass PostCreateView(FormView):template_name = 'post_form.html'form_class = PostFormsuccess_url = '/posts/'def form_valid(self, form):form.save()  # 保存表单数据return super().form_valid(form)

参数

  • template_name: 使用的模板名称。
  • form_class: 表单类。
  • success_url: 提交成功后重定向的 URL。
2.2 新增视图

新增视图通常与表单视图结合使用,允许用户创建新记录。使用 FormViewCreateView

示例

from django.views.generic.edit import CreateViewclass PostCreateView(CreateView):model = Posttemplate_name = 'post_form.html'form_class = PostFormsuccess_url = '/posts/'

参数

  • model: 关联的模型类。
  • template_name: 使用的模板名称。
  • form_class: 表单类。
  • success_url: 提交成功后重定向的 URL。
2.3 修改视图

修改视图用于更新现有记录,使用 UpdateView

示例

from django.views.generic.edit import UpdateViewclass PostUpdateView(UpdateView):model = Posttemplate_name = 'post_form.html'form_class = PostFormsuccess_url = '/posts/'

参数

  • model: 关联的模型类。
  • template_name: 使用的模板名称。
  • form_class: 表单类。
  • success_url: 提交成功后重定向的 URL。
2.4 删除视图

删除视图用于删除现有记录,使用 DeleteView

示例

from django.views.generic.edit import DeleteViewclass PostDeleteView(DeleteView):model = Posttemplate_name = 'post_confirm_delete.html'success_url = '/posts/'

参数

  • model: 关联的模型类。
  • template_name: 使用的模板名称。
  • success_url: 删除成功后重定向的 URL。

3. 日期筛选视图

3.1 月份视图

方法

  • get_queryset(): 返回特定月份的数据。

使用示例

from django.shortcuts import render
from .models import Postdef posts_by_month(request, year, month):posts = Post.objects.filter(created_at__year=year,created_at__month=month)return render(request, 'posts_by_month.html', {'posts': posts})

参数

  • year: 年份(整数)。
  • month: 月份(整数)。
3.2 周期视图

方法

  • get_queryset(): 返回特定时间段的数据。

使用示例

from django.shortcuts import render
from .models import Postdef posts_in_period(request, start_date, end_date):posts = Post.objects.filter(created_at__range=[start_date, end_date])return render(request, 'posts_in_period.html', {'posts': posts})

参数

  • start_date: 开始日期(字符串或日期对象)。
  • end_date: 结束日期(字符串或日期对象)。

http://www.ppmy.cn/server/143174.html

相关文章

无人机+无人车+机器狗:城市巷战突破技术详解

在城市巷战中,无人机、无人车和机器狗的组合可以形成一种全新的战场突破技术,这种组合能够大幅提升作战效率,减少人员伤亡。以下是对这一技术的详细解析: 一、无人机的作用 1.空中侦察:无人机能够提供高空视角&#x…

Acwing342

这个代码实现了一种结合 连通块分解、拓扑排序 和 Dijkstra 算法 的复杂图的最短路径计算方法,适用于含有两类边的图结构:普通边(在连通块内)和特殊边(跨连通块)。 以下是详细的代码讲解,逐步解…

IDEA旗舰版编辑器器快速⼊门(笔记)

简介:javaweb开发必备软件之IDEA期间版介绍 DEA编辑器器版本介绍 官⽹网:https://www.jetbrains.com/地址:https://www.jetbrains.com/idea/download/#sectionmac DEA 分社区版(Community) 和 旗舰版(Ultimate),我们做JavaWeb开…

C++中的观察者模式:通俗易懂的讲解与实现

什么是观察者模式? 观察者模式是一种常见的设计模式,它解决了这样一个问题:当某个对象的状态发生变化时,如何通知依赖它的其他对象? 用通俗的话说,观察者模式就像我们日常的“订阅-通知”机制&#xff1a…

【青牛科技】汽车收音机调频中频放大器——D1145

性能优势 内置多种电路:内置芯片中频计数缓冲电路及 ETR 微处理控制开关电路,这些电路的集成有助于提升整体性能和功能的集成度,减少外部电路的复杂性和成本1.线性输出信号好:能够输出质量较高的线性信号,这对于保证收…

为什么VScode不能连服务器,MobaXterm可以连

VSCode无法连接服务器但MobaXterm可以连接的原因可能有以下几种‌: ‌SSH协议问题‌:首先检查SSH协议是否正常工作。可以尝试使用其他终端工具(如Xshell或MobaXterm)连接服务器,如果这些工具也无法连接,说…

2022数学分析【南昌大学】

2022 数学分析 利用极限定义证明: lim ⁡ n → ∞ 4 n 3 + n − 2 2 n 3 − 10 = 2 \mathop {\lim }\limits_{n \to \infty } \frac{{4{n^3} + n - 2}}{{2{n^3} - 10}} = 2 n→∞lim​2n3−104n3+n−2​=2 ∀ ε > 0 \forall \varepsilon>0 ∀ε>0 要使不等式成立,…

基于Python的招聘信息推荐系统

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏:…