Django自学笔记 7-1 基于类的视图(Class-based views)介绍

————总目录——前言——框架版本————

======================= 大爽歌作,made by big shuang =======================

一、基于类的视图(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>
    <meta charset="UTF-8">
    <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: 该视图所对应的模型
  • fields: 哪些字段可展示编辑
  • form_class:使用哪种表单来展示这个模型
  • template_name:渲染该视图使用的模板
  • success_url:指定编辑成功后跳转的页面

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值