zoukankan      html  css  js  c++  java
  • 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中的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

  • 相关阅读:
    JMeter性能测试
    CentOS7下安装elsticsearch、kibana、filebeat、logstash服务
    Docker容器 之 Harbor 私有镜像仓库的搭建
    Vagrant and VirtualBox 构建 CentOS7
    java 位运算 之 左移和右移理解
    List如果一边遍历,一边删除,且不会报错呢?
    享元模式
    装饰器模式
    日常记录
    销售与营销有什么区别?
  • 原文地址:https://www.cnblogs.com/BigShuang/p/14285597.html
Copyright © 2011-2022 走看看