Django笔记&教程 7-1 基于类的视图(Class-based views)介绍
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中的register的path就可以改为
path('register', CreateStudentView.as_view(), name="register"),
4 常用介绍
Django 实现了很多种CBVs。
他们都使用类方法as_view来获得视图函数,只不过参数可能会不同。
对于初学者,首先常用到的是一些通用的编辑视图Generic editing views,
这些视图都在django.views.generic.edit中,
有以下几种
FormViewCreateViewUpdateViewDeleteView
一般来讲,对于编辑视图,都有以下属性
model: 视图将为其显示数据的模型。(The model that this view will display data for.)fields: 需要在视图上展示的字段名称组成的列表form_class:要实例化的表单类,视图将会根据表单来展示字段。template_name:由字符串定义的要使用的模板的全名。不定义模板名将引发django.core.exceptions.ImproperlyConfigured异常。success_url:成功处理表单时重定向到的URL
补充1:fields和form_class这两个参数互斥,必须且只能设置其中一个。
补充2:DeleteView无fields、form_class属性
除了以上的常用编辑属性,还有一个属性很有必要讲一讲,
这个属性是模板中常常用到的,也时常会需要自己去编辑设置。
在介绍这个属性之前,大家先看一下本文第二部分中的register.html,里面是不是有一个叫做
form的变量,
这里简单的介绍一个展示视图需要常常用到的属性:
context_object_name
在context中使用的变量的名称,即在模板中渲染时用到的变量名,这个属性只是指定名字,对应的实际变量是由视图本身决定的,
在视图中。
看到这里估计有些人就忘了context是什么,这个可以回过去看一看第三章第一节的内容
Django还有些其他的视图,比如展示视图,实际开发中,也可能常需要用到,具体可查阅官方文档:
class-based-views
Django笔记&教程 7-1 基于类的视图(Class-based views)介绍的更多相关文章
- Django笔记&教程 总目录
本篇博客只有目录,正文内容在目录章节链接的博客里 除目录本身外,没有链接的章节,说明内容还没开始编辑 本项目笔记仍在不断创作中,还有些内容会根据自身所学不断更新完善 本项目主要为markdwon文档, ...
- Django笔记&教程 7-3 拓展CBVs(Class-based views)
Django 自学笔记兼学习教程第7章第3节--拓展CBVs(Class-based views) 点击查看教程总目录 一般而言,直接使用原生的Class-based views,能展现的样式和内容是 ...
- django 中基于类的视图
django 视图 分为两种: 1. FBV 基于函数的视图 function based view 2. CBV 基于类的视图 class based ...
- Django REST FrameWork中文教程3:基于类的视图
我们也可以使用基于类的视图编写我们的API视图,而不是基于函数的视图.我们将看到这是一个强大的模式,允许我们重用常用功能,并帮助我们保持代码DRY. 使用基于类的视图重写我们的API 我们将首先将根视 ...
- 运维开发笔记整理-基于类的视图(CBV)
运维开发笔记整理-基于类的视图(CBV) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.FBV与CBV 1>.什么是FBV FBC(function base views ...
- Django编写RESTful API(三):基于类的视图
欢迎访问我的个人网站:www.comingnext.cn 前言 在上一篇文章中,主要讲的是请求和响应,项目里面views.py中的视图函数都是基于函数的,并且我们介绍了@api_view这个很有用的装 ...
- Django 基于类的视图(CBV)执行流程 CBV 源码分析
一.CBV(基于类的视图) 视图是可以调用的,它接受请求并返回响应,这不仅仅是一个函数,Django提供了一些可以用作视图的类的例子,这些允许您通过继承或mixin来构建视图并重用代码. 基本示例 D ...
- Django——基于类的视图源码分析 一
基于类的视图(Class-based view)是Django 1.3引入的新的视图编写方式,用于取代以前基于函数(Function-based)方式. 借助于OO和Python中方便的多重继承特性, ...
- Django——基于类的视图源码分析 二
源码分析 抽象类和常用视图(base.py) 这个文件包含视图的顶级抽象类(View),基于模板的工具类(TemplateResponseMixin),模板视图(TemplateView)和重定向视图 ...
随机推荐
- ❤️Python接口自动化,一文告诉你连接各大【数据库】建议收藏❤️
@ 目录 前言 常见数据库 Mysql Oracle sql-server PostgreSQL MongoDB Redis 前言 相信很多小伙伴在使用python进行自动化测试的时候,都会涉及到数据 ...
- Sentry 监控 - 全栈开发人员的分布式跟踪 101 系列教程(第一部分)
系列 1 分钟快速使用 Docker 上手最新版 Sentry-CLI - 创建版本 快速使用 Docker 上手 Sentry-CLI - 30 秒上手 Source Maps Sentry For ...
- 关于 Spring Boot 中创建对象的疑虑 → @Bean 与 @Component 同时作用同一个类,会怎么样?
开心一刻 今天放学回家,气愤愤地找到我妈 我:妈,我们班同学都说我五官长得特别平 妈:你小时候爱趴着睡觉 我:你怎么不把我翻过来呢 妈:那你不是凌晨2点时候出生的吗 我:嗯,凌晨2点出生就爱趴着睡觉呗 ...
- 前端快闪四: 拦截axios请求和响应
马甲哥继续在同程艺龙写一点大前端: 今天我们来了解一下 如何拦截axios请求/响应? axios是一个基于 promise 的网络请求库,可以用于浏览器和 node.js, promise 类似于C ...
- JVM学习笔记——栈区
栈区 Stack Area 栈是运行时的单位,堆是存储单位,栈解决程序的运行问题,即程序如何执行,如何处理数据. 每个线程在创建时都创建一个该线程私有的虚拟机栈,每个栈里有许多栈帧,一个栈帧对应一个 ...
- Serverless 架构下的服务优雅下线实践
作者 | 行松 阿里巴巴云原生团队 应用发布.服务升级一直是一个让开发和运维同学既兴奋又担心的事情. 兴奋的是有新功能上线,自己的产品可以对用户提供更多的能力和价值:担心的是上线的过程会不会出现意外情 ...
- 未来云原生 | CIF 论坛精彩看点
当下云原生技术正在飞速发展,那么如何准确理解「云原生」?在发展不够成熟,行业认知差异大的情况下,不论是云原生计算基金会(CNCF),还是行业的任何大咖,都不能给出精确的.便于理解的定义.我们要理解的逻 ...
- FastAPI 学习之路(二十七)安全校验
你写API接口肯定你是希望是有权限的人才能访问,没有权限的人是不能访问的,那么我们应该如何去处理呢,我们可以用的验证方式有很多,我们这次分享的是用:OAuth2来认证.那么我们看下,需要怎么才能实现呢 ...
- 重学c#系列——list(十二)
前言 简单介绍一下list. 正文 这里以list为介绍. private static readonly T[] s_emptyArray = new T[0]; public List() { t ...
- Java:包装类小记
Java:包装类 对 Java 中的 包装类 这个概念,做一个微不足道的小小小小记 基本数据&包装类 四类八种基本数据类型: 数据类型 关键字 内存占用 取值范围 字节型 byte 1个字节 ...