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

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

1. 数据显示视图

1.1 重定向视图

方法

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

使用示例

python 复制代码
from django.shortcuts import redirect

def my_view(request):
    # 处理某些逻辑
    return redirect('home')  # 重定向到首页

参数

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

方法

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

使用示例

python 复制代码
from django.http import HttpResponse

def basic_view(request):
    return HttpResponse("这是一个基础视图")

参数

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

方法

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

使用示例

python 复制代码
from django.views.generic import ListView
from .models import Post

class PostListView(ListView):
    model = Post
    template_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(): 返回上下文数据。

使用示例

python 复制代码
from django.views.generic import DetailView
from .models import Post

class PostDetailView(DetailView):
    model = Post
    template_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(): 获取表单实例。

使用示例

python 复制代码
from django.views.generic.edit import FormView
from .forms import PostForm

class PostCreateView(FormView):
    template_name = 'post_form.html'
    form_class = PostForm
    success_url = '/posts/'

    def form_valid(self, form):
        form.save()  # 保存表单数据
        return super().form_valid(form)

参数

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

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

示例

python 复制代码
from django.views.generic.edit import CreateView

class PostCreateView(CreateView):
    model = Post
    template_name = 'post_form.html'
    form_class = PostForm
    success_url = '/posts/'

参数

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

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

示例

python 复制代码
from django.views.generic.edit import UpdateView

class PostUpdateView(UpdateView):
    model = Post
    template_name = 'post_form.html'
    form_class = PostForm
    success_url = '/posts/'

参数

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

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

示例

python 复制代码
from django.views.generic.edit import DeleteView

class PostDeleteView(DeleteView):
    model = Post
    template_name = 'post_confirm_delete.html'
    success_url = '/posts/'

参数

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

3. 日期筛选视图

3.1 月份视图

方法

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

使用示例

python 复制代码
from django.shortcuts import render
from .models import Post

def 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(): 返回特定时间段的数据。

使用示例

python 复制代码
from django.shortcuts import render
from .models import Post

def 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: 结束日期(字符串或日期对象)。
相关推荐
悟空聊架构2 小时前
基于KaiwuDB在游乐场“刷卡+投币”双模消费系统中的落地实践
数据库·后端·架构
IvorySQL2 小时前
PostgreSQL 技术日报 (3月4日)|硬核干货 + 内核暗流一网打尽
数据库·postgresql·开源
进击的丸子5 小时前
虹软人脸服务器版SDK(Linux/ARM Pro)多线程调用及性能优化
linux·数据库·后端
NineData21 小时前
NineData智能数据管理平台新功能发布|2026年1-2月
数据库·sql·数据分析
IvorySQL1 天前
双星闪耀温哥华:IvorySQL 社区两项议题入选 PGConf.dev 2026
数据库·postgresql·开源
ma_king1 天前
入门 java 和 数据库
java·数据库·后端
程序设计实验室1 天前
当人人都能用 AI 写代码时,我为什么选择重回 Django?
django·djangostarter
jiayou641 天前
KingbaseES 实战:审计追踪配置与运维实践
数据库
NineData2 天前
NineData 迁移评估功能正式上线
数据库·dba
NineData2 天前
数据库迁移总踩坑?用 NineData 迁移评估,提前识别所有兼容性风险
数据库·程序员·云计算