首页 > 其他分享 >django 1.8 官方文档翻译: 3-1-2 编写视图

django 1.8 官方文档翻译: 3-1-2 编写视图

时间:2023-04-13 14:38:39浏览次数:41  
标签:request 1.8 视图 Django Http404 HttpResponse django


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

交流群:467338606

编写视图

一个视图函数,或者简短来说叫做视图,是一个简单的Python函数,它接受web请求,并且返回web响应。响应可以是一张网页的HTML内容,一个重定向,一个404错误,一个XML文档,或者一张图片… 是任何东西都可以。无论视图本身包含什么逻辑,都要返回响应。代码写在哪里也无所谓,只要它在你的Python目录下面。除此之外没有更多的要求了——可以说“没有什么神奇的地方”。为了能够把代码放在某个地方,惯例是把视图放在叫做views.py的文件中,然后把它放到你的项目或者应用目录里。

一个简单的视图

下面是一个返回当前日期和时间作为HTML文档的视图:

from django.http import HttpResponse
import datetime

def current_datetime(request):
    now = datetime.datetime.now()
    html = "<html><body>It is now %s.</body></html>" % now
    return HttpResponse(html)

让我们逐行阅读上面的代码:

  • 首先,我们从 django.http模块导入了HttpResponse类,以及Python的datetime库。
  • 接着,我们定义了current_datetime函数。它是一个视图函数。每个视图函数都应接收HttpRequest对象作为第一个参数,一般叫做request。
  • 注意视图函数的名称并不重要;不需要用一个统一的命名方式来命名,以便让Django识别它。我们将其命名为current_datetime,是因为这个名称能够精确地反映出它的功能。
  • 这个视图会返回一个HttpResponse对象,其中包含生成的响应。每个视图函数都要返回HttpResponse对象。(有例外,我们接下来会讲。)

Django中的时区

Django中包含一个TIME_ZONE设置,默认为America/Chicago。可能并不是你住的地方,所以你可能会在设置文件里修改它。

把你的URL映射到视图

所以,再重复一遍,这个视图函数返回了一个包含当前日期和时间的HTML页面。你需要创建URLconf来展示在特定的URL这一视图; 详见URL 分发器。

返回错误

在Django中返回HTTP错误是相当容易的。有一些HttpResponse的子类代表不是200(“OK”)的HTTP状态码。你可以在request/response文档中找到所有可用的子类。你可以返回那些子类的一个实例,而不是普通的HttpResponse ,来表示一个错误。例如:

from django.http import HttpResponse, HttpResponseNotFound

def my_view(request):
    # ...
    if foo:
        return HttpResponseNotFound('<h1>Page not found</h1>')
    else:
        return HttpResponse('<h1>Page was found</h1>')

由于一些状态码不太常用,所以不是每个状态码都有一个特化的子类。然而,如HttpResponse文档中所说的那样,你也可以向HttpResponse的构造器传递HTTP状态码,来创建你想要的任何状态码的返回类。例如:

from django.http import HttpResponse

def my_view(request):
    # ...

    # Return a "created" (201) response code.
    return HttpResponse(status=201)

由于404错误是最常见的HTTP错误,所以处理这一错误的方式非常便利。

Http404异常

class django.http.Http404

当你返回一个像HttpResponseNotFound这样的错误时,它会输出这个错误页面的HTML作为结果:

return HttpResponseNotFound('<h1>Page not found</h1>')

为了便利起见,也因为你的站点有个一致的404页面是个好主意,Django提供了Http404异常。如果你在视图函数中的任何地方抛出Http404异常,Django都会捕获它,并且带上HTTP404错误码返回你应用的标准错误页面。

像这样:

from django.http import Http404
from django.shortcuts import render_to_response
from polls.models import Poll

def detail(request, poll_id):
    try:
        p = Poll.objects.get(pk=poll_id)
    except Poll.DoesNotExist:
        raise Http404("Poll does not exist")
    return render_to_response('polls/detail.html', {'poll': p})

为了尽可能利用 Http404,你应该创建一个用来在404错误产生时展示的模板。这个模板应该叫做404.html,并且在你的模板树中位于最顶层。

如果你在抛出Http404异常时提供了一条消息,当DEBUG为True时它会出现在标准404模板的展示中。你可以将这些消息用于调试;但他们通常不适用于404模板本身。

自定义错误视图

Django中默认的错误视图对于大多数web应用已经足够了,但是如果你需要任何自定义行为,重写它很容易。只要在你的URLconf中指定下面的处理器(在其他任何地方设置它们不会有效)。

handler404覆盖了page_not_found()视图:

handler404 = 'mysite.views.my_custom_page_not_found_view'

handler500覆盖了server_error()视图:

handler500 = 'mysite.views.my_custom_error_view'

handler403覆盖了permission_denied()视图:

handler403 = 'mysite.views.my_custom_permission_denied_view'

handler400覆盖了bad_request()视图:

handler400 = 'mysite.views.my_custom_bad_request_view'


标签:request,1.8,视图,Django,Http404,HttpResponse,django
From: https://blog.51cto.com/wizardforcel/6187971

相关文章

  • django 1.8 官方文档翻译: 2-6-3 提供初始数据
    Django文档协作翻译小组人手紧缺,有兴趣的朋友可以加入我们,完全公益性质。交流群:467338606为模型提供初始数据当你首次建立一个应用的时候,为你的数据库预先安装一些硬编码的数据,是很有用处的。有几种方法可以让Django自动创建这些数据:你可以通过fixtures提供初始数据,或者提供一个......
  • django 1.8 官方文档翻译: 2-6-4 数据库访问优化
    Django文档协作翻译小组人手紧缺,有兴趣的朋友可以加入我们,完全公益性质。交流群:467338606数据库访问优化Django的数据库层提供了很多方法来帮助开发者充分的利用他们的数据库。这篇文档收集了相关文档的一些链接,添加了大量提示,并且按照优化数据库使用的步骤的概要来组织。性能优先......
  • django 1.8 官方文档翻译: 3-4-2 内建显示视图
    Django文档协作翻译小组人手紧缺,有兴趣的朋友可以加入我们,完全公益性质。交流群:467338606基于类的内建通用视图编写Web应用可能是单调的,因为你需要不断的重复某一种模式。Django尝试从model和template层移除一些单调的情况,但是Web开发者依然会在view(视图)层经历这种厌烦。Django......
  • django 1.8 官方文档翻译: 4-2-4 人性化
    Django文档协作翻译小组人手紧缺,有兴趣的朋友可以加入我们,完全公益性质。交流群:467338606django.contrib.humanize一系列Django的模板过滤器,有助于向数据添加“人文关怀”。把’django.contrib.humanize’添加到INSTALLED_APPS设置来激活这些过滤器。执行以上步骤之后,在模板中使......
  • django 1.8 官方文档翻译: 3-4-3 使用基于类的视图处理表单
    使用基于类的视图处理表单表单的处理通常有3个步骤:初始的的GET(空白或预填充的表单)带有非法数据的POST(通常重新显示表单和错误信息)带有合法数据的POST(处理数据并重定向)你自己实现这些功能经常导致许多重复的样本代码(参见在视图中使用表单)。为了避免这点,Django提供一系列的通用的......
  • django 1.8 官方文档翻译: 3-4-1 基于类的视图
    基于类的视图视图是一个可调用对象,它接收一个请求然后返回一个响应。这个可调用对象可以不只是函数,Django提供一些可以用作视图的类。它们允许你结构化你的视图并且利用继承和混合重用代码。后面我们将介绍一些用于简单任务的通用视图,但你可能想要设计自己的可重用视图的结构以适......
  • 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......