Django 自学笔记兼学习教程第7章第1节——基于类的视图(Class-based views)介绍

点击查看教程总目录

1 介绍

Class-based views (CBVs) are views generated from models.

Class-based views:基于模型自动生成的视图。

在web开发中,为模型(models)制作各种各样的视图是工作量很大的事情,

Class-based views简化了这些工作。

2 代码

CBVs可以直接使用,例如在urls.py里直接使用CreateView来添加学生实例。

其中每个参数的意思我们在本文最后面解释

from django.urls import path
from django.views.generic import CreateView from my_app.views import login
from my_app import view
from my_app.models import Student urlpatterns = [
path('login/', login.page, name="login"),
path('hello/', view.hello), path('register', CreateView.as_view(model=Student, template_name="register.html", success_url='login',fields="__all__"),
name="register"),
]

其中register.html如下

<!DOCTYPE html>
<html lang="en">
<head> <title>
Login
</title>
</head>
<body>
<div>Register</div>
<div>
<form method="post">
{% csrf_token %}
{{form.as_p}}
<p><input type="submit" value="Register"/></p>
</form>
</div>
</body>
</html>

Student模型见Django自学笔记 4-1 模型(Models)介绍中的示例。

其他代码见本专栏之前博客(实际上本文用不到)

此时运行项目后注册页面如下

3 继承使用

上面举得例子是在urls.py中调用类方法as_view,指定对应的参数,去生成视图。

然而这样写不好拓展,修改起来也麻烦。

所以一般来说,更推荐在views.py中去继承CBVs,从而设置编写自己需要的视图类

再在urls.py中不传参调用as_view方法

比如上面的

CreateView.as_view(model=Student, template_name="register.html", success_url='login',fields="__all__"),
name="register")

推荐改为在views.py去编写一个新的类CreateStudentView

其中每个属性的意思我们在本文最后面解释

class CreateStudentView(CreateView):
model = Student
fields="__all__"
template_name = "user/register.html"
success_url = "login"

然后urls.py中的registerpath就可以改为

path('register', CreateStudentView.as_view(), name="register"),

4 常用介绍

Django 实现了很多种CBVs。

他们都使用类方法as_view来获得视图函数,只不过参数可能会不同。

对于初学者,首先常用到的是一些通用的编辑视图Generic editing views

这些视图都在django.views.generic.edit中,

有以下几种

  • FormView
  • CreateView
  • UpdateView
  • DeleteView

一般来讲,对于编辑视图,都有以下属性

  • model: 视图将为其显示数据的模型。(The model that this view will display data for.)
  • fields: 需要在视图上展示的字段名称组成的列表
  • form_class:要实例化的表单类,视图将会根据表单来展示字段。
  • template_name:由字符串定义的要使用的模板的全名。不定义模板名将引发django.core.exceptions.ImproperlyConfigured异常。
  • success_url:成功处理表单时重定向到的URL

补充1:fieldsform_class这两个参数互斥,必须且只能设置其中一个。

补充2:DeleteViewfieldsform_class属性

除了以上的常用编辑属性,还有一个属性很有必要讲一讲,

这个属性是模板中常常用到的,也时常会需要自己去编辑设置。

在介绍这个属性之前,大家先看一下本文第二部分中的register.html,里面是不是有一个叫做

form的变量,

这里简单的介绍一个展示视图需要常常用到的属性:

context_object_name

context中使用的变量的名称,即在模板中渲染时用到的变量名,这个属性只是指定名字,对应的实际变量是由视图本身决定的,

在视图中。

看到这里估计有些人就忘了context是什么,这个可以回过去看一看第三章第一节的内容

Django还有些其他的视图,比如展示视图,实际开发中,也可能常需要用到,具体可查阅官方文档:

class-based-views

Django笔记&教程 7-1 基于类的视图(Class-based views)介绍的更多相关文章

  1. Django笔记&教程 总目录

    本篇博客只有目录,正文内容在目录章节链接的博客里 除目录本身外,没有链接的章节,说明内容还没开始编辑 本项目笔记仍在不断创作中,还有些内容会根据自身所学不断更新完善 本项目主要为markdwon文档, ...

  2. Django笔记&教程 7-3 拓展CBVs(Class-based views)

    Django 自学笔记兼学习教程第7章第3节--拓展CBVs(Class-based views) 点击查看教程总目录 一般而言,直接使用原生的Class-based views,能展现的样式和内容是 ...

  3. django 中基于类的视图

    django 视图 分为两种: 1.  FBV  基于函数的视图      function   based  view 2.  CBV  基于类的视图         class   based  ...

  4. Django REST FrameWork中文教程3:基于类的视图

    我们也可以使用基于类的视图编写我们的API视图,而不是基于函数的视图.我们将看到这是一个强大的模式,允许我们重用常用功能,并帮助我们保持代码DRY. 使用基于类的视图重写我们的API 我们将首先将根视 ...

  5. 运维开发笔记整理-基于类的视图(CBV)

    运维开发笔记整理-基于类的视图(CBV) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.FBV与CBV 1>.什么是FBV FBC(function base views ...

  6. Django编写RESTful API(三):基于类的视图

    欢迎访问我的个人网站:www.comingnext.cn 前言 在上一篇文章中,主要讲的是请求和响应,项目里面views.py中的视图函数都是基于函数的,并且我们介绍了@api_view这个很有用的装 ...

  7. Django 基于类的视图(CBV)执行流程 CBV 源码分析

    一.CBV(基于类的视图) 视图是可以调用的,它接受请求并返回响应,这不仅仅是一个函数,Django提供了一些可以用作视图的类的例子,这些允许您通过继承或mixin来构建视图并重用代码. 基本示例 D ...

  8. Django——基于类的视图源码分析 一

    基于类的视图(Class-based view)是Django 1.3引入的新的视图编写方式,用于取代以前基于函数(Function-based)方式. 借助于OO和Python中方便的多重继承特性, ...

  9. Django——基于类的视图源码分析 二

    源码分析 抽象类和常用视图(base.py) 这个文件包含视图的顶级抽象类(View),基于模板的工具类(TemplateResponseMixin),模板视图(TemplateView)和重定向视图 ...

随机推荐

  1. Docker-Java限制cpu和内存及浅析源码解决docker磁盘挂载失效问题

    需求 之前工作流的运行都是用的docker-java提供的api拉起的docker容器直接跑服务,但是最新线上的新业务资源消耗较大,单个容器如果不加控制,CPU和内存都会拉满,导致服务器莫名宕机事故的 ...

  2. 使用CEF(四)— 在QT中集成CEF(1):基本集成

    QT作为C++下著名的跨平台软件开发框架,实现了一套代码可以在所有的操作系统.平台和屏幕类型上部署.我们前几篇文章讲解了如何构建一款基于CEF的简单的样例,但这些样例的GUI都是使用的原生的或者是控件 ...

  3. HPE ProLiant 系列服务器Microsoft Windows 2008 R2系统下网卡绑定方法

    HPE Network Configuration Utility(以下简称NCU) 网卡绑定工具,用户可以通过该工具很方便的把服务器的多个网卡捆绑到一起以达到容错和增加可用带宽的目的. 1.打开NC ...

  4. Hibernate的介绍及入门小案例

    1.Hibernate的诞生 在以前使用传统的JDBC开发应用系统时,如果是小型应用系统,并不觉得有什么麻烦,但是对于大型应用系统的开发,使用JDBC就会显得力不从心,例如对几十,几百张包含几十个字段 ...

  5. Kubernetes-Service介绍(三)-Ingress(含最新版安装踩坑实践)

    前言 本篇是Kubernetes第十篇,大家一定要把环境搭建起来,看是解决不了问题的,必须实战. Kubernetes系列文章: Kubernetes介绍 Kubernetes环境搭建 Kuberne ...

  6. Codeforces1575D

    思路分析 此题采用dfs,注意X选中了之后所有的X值相同,所以需要一个flag来存储X的值. 注意前导0要单独讨论,然后就是当'X'或者'_'在第一位时不能选0,其它位可以选0 - 9 任意一个数. ...

  7. Java:AQS 小记-2(ReentrantLock)

    Java:AQS 小记-2(ReentrantLock) 整体结构 ReentrantLock 类图 AbstractOwnableSynchronizer 类 public abstract cla ...

  8. Java:并发笔记-04

    Java:并发笔记-04 说明:这是看了 bilibili 上 黑马程序员 的课程 java并发编程 后做的笔记 本章内容-3 线程状态转换 活跃性 Lock 3.10 重新理解线程状态转换 假设有线 ...

  9. Java:抽象类和接口小记

    Java:抽象类和接口小记 对 Java 中的 抽象类和接口,做一个微不足道的小小小小记 抽象类:使用 abstract 修饰,子类用 extends 继承: 接口:使用 interface 修饰,采 ...

  10. Spring Cloud Alibaba Nacos Config 的使用

    Spring Cloud Alibaba Nacos Config 的使用 一.需求 二.实现功能 1.加载 product-provider-dev.yaml 配置文件 2.实现配置的自动刷新 3. ...