首页 > 其他分享 >django 1.8 官方文档翻译: 3-4-1 基于类的视图

django 1.8 官方文档翻译: 3-4-1 基于类的视图

时间:2023-04-13 14:37:15浏览次数:41  
标签:views url 1.8 视图 django import TemplateView


基于类的视图

视图是一个可调用对象,它接收一个请求然后返回一个响应。这个可调用对象可以不只是函数,Django 提供一些可以用作视图的类。它们允许你结构化你的视图并且利用继承和混合重用代码。后面我们将介绍一些用于简单任务的通用视图,但你可能想要设计自己的可重用视图的结构以适合你的使用场景。完整的细节,请参见基于类的视图的参考文档。

  • 基于类的视图简介
  • 内建的基于类的通用视图
  • 使用基于类的视图处理表单
  • 使用混合来扩展视图类

基本的示例

Django 提供基本的视图类,它们适用于广泛的应用。所有的视图类继承自View类,它负责连接视图到URL、HTTP 方法调度和其它简单的功能。RedirectView用于简单的HTTP 重定向,TemplateView扩展基类来渲染模板。

在URLconf 中的简单用法

使用通用视图最简单的方法是在URLconf 中创建它们。如果你只是修改基于类的视图的一些简单属性,你可以将它们直接传递给as_view()方法调用:

from django.conf.urls import url
from django.views.generic import TemplateView

urlpatterns = [
    url(r'^about/', TemplateView.as_view(template_name="about.html")),
]

传递给as_view()的参数将覆盖类中的属性。在这个例子中,我们设置TemplateViewtemplate_name。可以使用类似的方法覆盖RedirectViewurl属性。

子类化通用视图

第二种,功能更强一点的使用通用视图的方式是继承一个已经存在的视图并在子类中覆盖其属性(例如template_name)或方法(例如get_context_data)以提供新的值或方法。例如,考虑只显示一个模板about.html的视图。Django 有一个通用视图TemplateView来做这件事,所以我们可以简单地子类化它,并覆盖模板的名称:

# some_app/views.py
from django.views.generic import TemplateView

class AboutView(TemplateView):
    template_name = "about.html"

然后我们只需要添加这个新的视图到我们的URLconf 中。TemplateView是一个类不是一个函数,所以我们将URL 指向类的as_view()方法,它让基于类的视图提供一个类似函数的入口:

# urls.py
from django.conf.urls import url
from some_app.views import AboutView

urlpatterns = [
    url(r'^about/', AboutView.as_view()),
]

关于如何使用内建的通用视图的更多信息,参考下一主题通用的基于类的视图。

支持其它HTTP 方法

假设有人想通过HTTP 访问我们的书库,它使用视图作为API。这个API 客户端将随时连接并下载自上次访问以来新出版的书籍的数据。如果没有新的书籍,仍然从数据库中获取书籍、渲染一个完整的响应并发送给客户端将是对CPU 和带宽的浪费。如果有个API 用于查询书籍最新发布的时间将会更好。

我们在URLconf 中映射URL 到书籍列表视图:

from django.conf.urls import url
from books.views import BookListView

urlpatterns = [
    url(r'^books/$', BookListView.as_view()),
]

下面是这个视图:

from django.http import HttpResponse
from django.views.generic import ListView
from books.models import Book

class BookListView(ListView):
    model = Book

    def head(self, *args, **kwargs):
        last_book = self.get_queryset().latest('publication_date')
        response = HttpResponse('')
        # RFC 1123 date format
        response['Last-Modified'] = last_book.publication_date.strftime('%a, %d %b %Y %H:%M:%S GMT')
        return response

如果该视图从GET 请求访问,将在响应中返回一个普通而简单的对象列表(使用book_list.html模板)。但如果客户端发出一个HEAD请求,响应将具有一个空的响应体而Last-Modified头部会指示最新发布的书籍的时间。基于这个信息,客户端可以下载或不下载完整的对象列表。

译者:Django 文档协作翻译小组,原文:Overview

本文以 CC BY-NC-SA 3.0 协议发布,转载请保留作者署名和文章出处。

Django 文档协作翻译小组人手紧缺,有兴趣的朋友可以加入我们,完全公益性质。交流群:467338606。

标签:views,url,1.8,视图,django,import,TemplateView
From: https://blog.51cto.com/wizardforcel/6187979

相关文章

  • django 1.8 官方文档翻译: 3-2-1 内建的视图
    内建的视图有几个Django的内建视图在编写视图中讲述,文档的其它地方也会有所讲述。开发环境中的文件服务器static.serve(request,path,document_root,show_indexes=False)在本地的开发环境中,除了你的项目中的静态文件,可能还有一些文件,出于方便,你希望让Django来作为服务器。ser......
  • django 1.8 官方文档翻译: 3-1-4 视图装饰器
    视图装饰器Django为视图提供了数个装饰器,用以支持相关的HTTP服务。允许的HTTP方法django.views.decorators.http包里的装饰器可以基于请求的方法来限制对视图的访问。若条件不满足会返回django.http.HttpResponseNotAllowed。require_http_methods(request_method_list)[source]......
  • django 1.8 官方文档翻译: 3-1-3 Django 的快捷函数
    Django的快捷函数django.shortcuts收集了“跨越”多层MVC的辅助函数和类。换句话讲,这些函数/类为了方便,引入了可控的耦合。renderrender(request,template_name[,context][,context_instance][,content_type][,status][,current_app][,dirs][,using])[source]结合一个......
  • django 1.8 官方文档翻译: 6-4-2 编写自定义的django-admin命令
    编写自定义的django-admin命令应用可以通过manage.py注册它们自己的动作。例如,你可能想为你正在发布的Django应用添加一个manage.py动作。在本页文档中,我们将为教程中的polls应用构建一个自定义的closepoll命令。要做到这点,只需向该应用添加一个management/commands目录。Django......
  • django 1.8 官方文档翻译: 6-6-2 如何使用WSGI 部署
    如何使用WSGI部署Django首要的部署平台是WSGI,它是PythonWeb服务器和应用的标准。Django的startproject管理命名为你设置一个简单的默认WSGI配置,你可以根据你项目的需要做调整并指定任何与WSGI兼容的应用服务器使用。Django包含以下WSGI服务器的入门文档:如何使用Apache和......
  • django 1.8 官方文档翻译:6-5-1 Django中的测试
    Django中的测试自动化测试对于现代web开发者来说,是非常实用的除错工具。你可以使用一系列测试–测试套件–来解决或者避免大量问题:当你编写新代码的时候,你可以使用测试来验证你的代码是否像预期一样工作。当你重构或者修改旧代码的时候,你可以使用测试来确保你的修改不会在意料之......
  • django 1.8 官方文档翻译:2-5-9 条件表达式
    条件表达式NewinDjango1.8.条件表达式允许你在过滤器、注解、聚合和更新操作中使用if...elif...else的逻辑。条件表达式为表中的每一行计算一系列的条件,并且返回匹配到的结果表达式。条件表达式也可以像其它表达式一样混合和嵌套。条件表达式类我们会在后面的例子中使用下......
  • django 1.8 官方文档翻译: 2-5-7 自定义查找
    自定义查找NewinDjango1.7.Django为过滤提供了大量的内建的查找(例如,exact和icontains)。这篇文档阐述了如何编写自定义查找,以及如何修改现存查找的功能。关于查找的API参考,详见查找API参考。一个简单的查找示例让我们从一个简单的自定义查找开始。我们会编写一个自定义查找ne,提供......
  • django 1.8 官方文档翻译: 2-5-10 数据库函数
    数据库函数NewinDjango1.8.下面记述的类为用户提供了一些方法,来在Django中使用底层数据库提供的函数用于注解、聚合或者过滤器等操作。函数也是表达式,所以可以像聚合函数一样混合使用它们。我们会在每个函数的实例中使用下面的模型:classAuthor(models.Model):name=model......
  • django 1.8 官方文档翻译: 3-3-4 管理文件
    管理文件这篇文档描述了Django为那些用户上传文件准备的文件访问API。底层的API足够通用,你可以使用为其它目的来使用它们。如果你想要处理静态文件(JS,CSS,以及其他),参见管理静态文件(CSS和图像)。通常,Django使用MEDIA_ROOT和MEDIA_URL设置在本地储存文件。下面的例子假设你使用这些默认......