广告
返回顶部
首页 > 资讯 > 后端开发 > Python >利用Django通用类视图(class
  • 522
分享到

利用Django通用类视图(class

视图Djangoclass 2023-01-31 07:01:55 522人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

最近在学习Django,官方文档介绍地十分详细。但是“大而全”就难免会有些不够速成,和我们这个浮躁的互联网时代格格不入,所以我就整理了这个文档。就像coolshell说的,一泡屎的时间就可以看完。 框架的好处就是,它已经为用户处理了绝大

最近在学习Django,官方文档介绍地十分详细。但是“大而全”就难免会有些不够速成,和我们这个浮躁的互联网时代格格不入,所以我就整理了这个文档。就像coolshell说的,一泡屎的时间就可以看完。


框架的好处就是,它已经为用户处理了绝大多数的场景中的重复代码,提供了封装好的接口,使得我们在开发中十分方便。在web开发中,我们常常遇到的一个场景就是:页面发起一个请求,后端执行相应的处理(修改数据、查询数据、插入数据等操作),再予以返回。

对于这些场景,DjanGo提供了几个class-based view来处理:

  • ListView

  • UpdateView

  • CreateView

  • DeleteView

这几个类视图分别对应着查询ListView、更新UpdateView、创建CreateView、删除DeleteView这几个操作。在整体上就可以分为查看、修改两个类型。下面,我们来通过一个例子来展现一下这几个View怎么使用。假设我们需要实现一个用于ssh验证的WEB服务。用户通过页面可以新建、查看、修改用于ssh登陆验证的内容(user、port、passWord、key)。

Model

既然是数据驱动的WEB,首先就必须要有数据。
针对于我们的需求,数据库设计如下:

class SSHAuth(models.Model):
    id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=50, unique=True)
    password = models.CharField(max_length=50, blank=True)
    privateKey = models.FileField(upload_to='sshKey', blank=True)
    user = models.CharField(max_length=30, blank=True)
    port = models.IntegerField(blank=True)

    # python3用__str__
    def __unicode__(self):
        return u'%s' % self.name

这里涉及到文件上传,想要了解可以参考我的另一篇整理文档。

ListView

对应官网文档
首先,从最简单的展示开始。ListView可以通过你给出的model以及想要展示的model中的field,在对应的数据库中查询出对应的对象存放在List对象中,并传递给template渲染。这个view只实现了get方法,它只接受get请求。也符合它用于查看数据的需求。在代码中,我们只需要指定它对应的模板,对应的model就可以了。

view

from django.views.generic.edit import CreateView


class SSHAuthListView(ListView):

    template_name = 'app_name/sshauth_list.html'
    model = SSHAuth

说明:
上面我没有给出filed的值,默认就是SSHAuth这个model中的所有filed都将被展示。
其实template_name也可以不特别给出。如果你在Django设置settings.py中的TEMPLATES下配置了'APP_DIRS': True 的话,Django默认会去渲染/project/app_name/templates/app_name/sshauth_list.html这个文件。

url

from django.conf.urls import patterns, url
from .view import SSHAuthListView
urlpatterns = patterns('',
    url(r'^sshAuth/$', SSHAuthListView.as_view(), name='listSSHAuth'),

template

<table>
    <thead>
        <tr>
            <th>ID</th>
            <th>Name</th>
            <th>Password</th>
            <th>PrivateKey</th>
            <th>User</th>
            <th>Port</th>
        </tr>
    </thead>
    <tbody>
    {% for item in object_list %}
        <tr>
            <td>{{ item.id }}</td>
            <td>{{ item.name }}</td>
            <td>{{ item.password }}</td>
            <td>{{ item.privateKey }}</td>
            <td>{{ item.user }}</td>
            <td>{{ item.port }}</td>
        </tr>
    {% endfor %}
    </tbody>
</table>

说明:
模板中的object_list对象就是view从model中取出的数据。以list的类型存储着所有数据instance。这个'object_list'的变量名是Django默认提供的,也可以人为修改为你想要的变量名,详细请看官网文档。


接下来就是第二类修改视图了。在web开发中约定俗成的规则是,对于查询类的请求用get,对于修改类的请求用post。Django在设计的时候也遵循了这个原则,所以以下的每个view中,都具有支持get和post的函数。

CreateVIew:

  • get——根据model提供一个空fORM

  • post——接收从get发来的请求,数据合法性校验,插入数据库

UpdateView:

  • get——根据model从数据库取出实例,并渲染form

  • post——接收从get来的请求,数据合法性校验,并更新数据库

CreateView

对应官网文档

view

class SSHAuthCreateView(CreateView):

    template_name = 'app_name/ssh_create.html'
    model = SSHAuth
    success_url = reverse_lazy('app_name:listSSHAuth')

说明:
model就是对应的数据库,在get请求发送过来的时候,Django会根据model里的字段个数、类型渲染form。而在post请求发送过来的时候,Django会根据model里的field属性去做合法性校验(类型是否正确、字段是否必填等),在校验成功以后重定向至success_url。

像上面的SSHAuthCreateView直接取model里面的数据,在password输入的时候input的type默认取的是text(因为model为CharField)。但是我们想要它是一个password的type。或者你想给它加入class属性,用于指定CSS。这样的话,就要自定制form。可以自己写一个form_class,然后在CreateView里面添加这个form_class。

form

from django import forms
from .models import SSHAuth, Inventory


bootstrap_form_css_class = {"class": 'form-control'}

class SSHAuthBootstrapForm(forms.ModelForm):
    """
    Use Bootstrap css.
    An abstract base class.
    """
    class Meta:
        model = SSHAuth
        fields = ['name', 'password', 'privateKey', 'user', 'port']
        # add html class attribute to form's component.
        widgets = {
            'name': forms.TextInput(attrs=bootstrap_form_css_class),
            'password': forms.PasswordInput(attrs=bootstrap_form_css_class),
            'privateKey': forms.ClearableFileInput(attrs=bootstrap_form_css_class),    
            #ClearableFileInput提供对UpdateView的clear支持
            'user': forms.TextInput(attrs=bootstrap_form_css_class),
            'port': forms.TextInput(attrs=bootstrap_form_css_class),
        }

说明:
fields字段为想要展示的字段,因为id是自增的主键,所以不做修改。widgets为form的字段类型以及html属性。其中的PasswordInput会将form中的该字段设为password类型;而ClearableFileInput则是带有清除文件功能的类型。

这样,只需要在view当中加入这个form_class就可以实现模板中渲染的form表单具有自定义的属性了:

class SSHAuthCreateView(CreateView):

    template_name = 'app_name/ssh_create.html'
    form_class = SSHAuthBootstrapForm
    success_url = reverse_lazy('app_name:listSSHAuth')

url

url(r'^sshAuth/createItem/$', SSHAuthCreateView.as_view(), name='createSSHAuth'),

template

<form role="form" method="post" enctype="multipart/form-data" action="{% url 'app_name:createSSHAuth' %}">
    {% csrf_token %}
    {% for field in form %}
        {% if field.errors %}
            <div class="form-group has-error" >
        {% else %}
            <div class="form-group">
        {% endif %}
            {{ field.label_tag }}
            {{ field }}
        {% for error in field.errors %}
            <span class="label label-danger">{{ error }}</span>
        {% endfor %}
            </div>
    {% endfor %}
        <button type="submit" class="btn btn-primary">{% block btn_name %}{% endblock %}</button>
</form>

html

生成的html代码如下:

<form role="form" method="post" enctype="multipart/form-data" action="/app_name/createItem">
            <input type='hidden' name='csrfmiddlewaretoken' value='*****' />
            
            
            <div class="form-group">
            
                <label for="id_name">Name:</label>
                <input class="form-control" id="id_name" maxlength="50" name="name" type="text" />
                
            </div>
            
            
            <div class="form-group">
            
                <label for="id_password">Password:</label>
                <input class="form-control" id="id_password" maxlength="50" name="password" type="text" />
                
            </div>
            
            
            <div class="form-group">
            
                <label for="id_privateKey">PrivateKey:</label>
                <input class="form-control" id="id_privateKey" name="privateKey" type="file" />
                
            </div>
            
            
            <div class="form-group">
            
                <label for="id_user">User:</label>
                <input class="form-control" id="id_user" maxlength="30" name="user" type="text" />
                
            </div>
            
            
            <div class="form-group">
            
                <label for="id_port">Port:</label>
                <input class="form-control" id="id_port" name="port" type="text" />
                
            </div>
            
            <button type="submit" class="btn btn-primary">Create</button>
        </form>

在渲染的时候,Django已经自动根据model、form_class自动处理了form的所有字段。包括type name id maxlength等属性。


剩下的UpdateView以及DeleteView与CreateView的实现也是相类似的原理。需要注意的就是在view代码中,即使是指定了form_class字段,而且form_class中也有指定model,但是还是需要在view代码里给出model。具体实现不再赘述。

--结束END--

本文标题: 利用Django通用类视图(class

本文链接: https://www.lsjlt.com/news/192240.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 利用Django通用类视图(class
    最近在学习Django,官方文档介绍地十分详细。但是“大而全”就难免会有些不够速成,和我们这个浮躁的互联网时代格格不入,所以我就整理了这个文档。就像coolshell说的,一泡屎的时间就可以看完。 框架的好处就是,它已经为用户处理了绝大...
    99+
    2023-01-31
    视图 Django class
  • Python Django通用视图和错误视图怎么使用
    本文小编为大家详细介绍“Python Django通用视图和错误视图怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“Python Django通用视图和错误视图怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路...
    99+
    2023-07-06
  • Django通用视图的作用是什么
    Django通用视图的作用是为开发者提供一组封装好的视图函数,以简化常见的数据处理和页面渲染任务。通用视图可以处理常见的操作,如列表...
    99+
    2023-09-29
    Django
  • Django视图怎么用
    这篇文章将为大家详细讲解有关Django视图怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一个视图函数或者类,简称视图(view),是一个简单的Python 函数(类),它接受Web请求并且返回We...
    99+
    2023-06-02
  • Django框架中视图的用法
    视图层 一个视图函数,简称视图,是一个简单的 Python 函数,它接受 Web 请求并且返回 Web 响应。 响应可以是一个 HTML 页面、一个 404 错误页面、重定向页面、X...
    99+
    2022-11-11
  • Django视图函数的具体使用
    视图是 MTV 设计模式中的 V 层,它是实现业务逻辑的关键层,可以用来连接 M 层与 T 层,起着纽带般的作用,在《Django MTV和MVC的区别》中也做了相应的介绍,所以它的...
    99+
    2022-11-11
  • PythonDjango通用视图和错误视图的使用代码
    定义通用视图 修改 book/models.py 代码中的 AuthorInfo 类,如果一致则不必修改 class AuthorInfo(models.Model): id...
    99+
    2023-05-15
    Python Django视图 Python Django通用视图 Python Django错误视图
  • python中怎么利用class类实现可迭代
    今天就跟大家聊聊有关python中怎么利用class类实现可迭代,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。 当定义一个普通的类时,指向类的实例默认情况下是不可迭代的,如下In&n...
    99+
    2023-06-01
  • 使用Django怎么编写一个应用视图
    这篇文章给大家介绍使用Django怎么编写一个应用视图,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。项目中创建应用首先切换到项目目录中其次输入命令:python manage.py s...
    99+
    2022-10-19
  • 利用Django内置的认证视图实现用户密码重置功能详解
    前言 密码重置功能相信对大家来说都不陌生,本文主要给大家介绍了关于使用Django内置的认证视图实现简单的通过邮箱重置密码的功能,分享出来供大家参考学习,下面话不多说了,来一起来看看详细的介绍吧。 版本:...
    99+
    2022-06-04
    视图 详解 用户密码
  • 利用Python实现普通视频变成动漫视频
    目录容我废话一下一、思路流程二、图像转动漫三、视频帧读取与视频帧写入容我废话一下 最近几个月,毒教材被曝光引发争议,那些编写度教材的人着实可恶。咱程序员也没有手绘插画能力,但咱可以借...
    99+
    2022-11-11
  • GoLand利用plantuml生成UML类图
    目录步骤1. 安装goplantuml2. 将goplantuml集成到GoLand3. 安装GoLand的PlantUML插件4. 安装和集成GraphvizGoLand内置的Di...
    99+
    2022-11-13
  • Android利用Canvas类绘制图形
    本文实例为大家分享了Android利用Canvas类绘制图形的具体代码,供大家参考,具体内容如下 首先介绍一下相关基础知识。 1.画笔(paint) 1.1、作用:画笔对象通过属性来...
    99+
    2022-11-13
  • Python利用folium实现地图可视化
    folium的简介 用Python处理数据,然后用Folium将它在Leaflet地图上进行可视化。Folium能够将通过Python处理后的数据轻松地在交互式的Leaflet地图...
    99+
    2022-11-12
  • java中视图类的作用是什么
    在Java中,视图类的主要作用是处理用户界面的显示和交互。视图类通常包含一些图形界面组件,如按钮、文本框、标签等,用于展示数据和接收...
    99+
    2023-09-23
    java
  • 怎么在python中利用Pycharm调试视图
    这期内容当中小编将会给大家带来有关怎么在python中利用Pycharm调试视图,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。python的数据类型有哪些python的数据类型:1. 数字类型,包括int...
    99+
    2023-06-15
  • mysql使用技巧 行类视图子查询
    查找描述信息中包括robot的电影对应的分类名称以及电影数目,而且还需要该分类对应电影数量>=5部 film表为电影表,category表为电影分类表,film_category表为电影表与电影分类表的中间表(多对多的中间表) ...
    99+
    2019-04-01
    mysql使用技巧 行类视图子查询
  • MySQL利用视图插入修改删除数据
    这里写自定义目录标题 1. 准备2.创建视图3.插入数据4.修改记录、删除记录5.总结: 1. 准备 已有数据库stu,数据表student、course、score: create da...
    99+
    2023-10-21
    mysql 数据库
  • 利用Python轻松实现视频转GIF动图
    目录前言1. 准备工作2. 初探3. 截取区域转动图4. 固定区域转动图5. 添加自定义文本前言 不知道大家是不是有过类似的经历,在看视频的时候觉得某段非常有意思想弄成动图,但是无从...
    99+
    2022-11-13
  • Android使用Notification实现宽视图通知栏(二)
    Notification是在你的应用常规界面之外展示的消息。当app让系统发送一个消息的时候,消息首先以图表的形式显示在通知栏。要查看消息的详情需要进入通知抽屉(notific...
    99+
    2022-06-06
    视图 notification Android
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作