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

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

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

1. 数据显示视图

1.1 重定向视图

方法

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

使用示例

from django.shortcuts import redirect

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

参数

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

方法

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

使用示例

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(): 返回上下文数据。

使用示例

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(): 返回上下文数据。

使用示例

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(): 获取表单实例。

使用示例

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

示例

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

示例

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

示例

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(): 返回特定月份的数据。

使用示例

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

使用示例

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: 结束日期(字符串或日期对象)。

http://www.kler.cn/a/400364.html

相关文章:

  • 集群聊天服务器(9)一对一聊天功能
  • 基于 MONAI 的 3D 图像分割任务2(Brain Tumour 和 SwinUNETR 训练)
  • LeetCode 2816.翻倍以链表形式表示的数字
  • sapiens推理的安装与使用
  • 初识Linux · 信号处理 · 续
  • H.265流媒体播放器EasyPlayer.js视频流媒体播放器关于直播流播放完毕是否能监听到
  • QT QLineEdit失去焦点事件问题与解决
  • SQLite Truncate Table
  • 电商系统架构演进
  • Kotlin return与return@forEachIndexed
  • etcd defrag
  • React Native 全栈开发实战班 - 用户界面进阶之流行 UI 库使用与集成
  • 数据库的三大范式
  • shell bash---类似数组类型
  • Spring Boot中集成Redis与MySQL
  • npm上传自己封装的插件(vue+vite)
  • 【青牛科技】带 ALC 双通道前置放大器电路D3308
  • sql中in()方法查询参数过多处理小记
  • thinkphp6模板调用URL方法生成的链接异常
  • 【graphics】图形绘制 C++
  • SpringCloud OpenFeign负载均衡远程调用 跨服务调用 连接池优化
  • HP G10服务器ESXI6.7告警提示ramdisk tmp已满
  • 使用useCallback引发对闭包的理解
  • 轻量云服务器:入门级云计算的最佳选择
  • JavaScript 中字符串和数组的概念解析与多角度对比区分
  • Javaweb梳理17——HTMLCSS简介