Django-视图
视图
视图函数或视图简而言之就是一个Python函数,它接受一个Web请求并返回一个Web相应。此响应可以是网页HTML内容,重定向或404错误、XML文档或图像。视图本身包含任何必须的逻辑来返回该响应。惯例是将view.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)
首先,我们需要导入HttpResponse这个类从django.http中
接下来,我们定义一个叫做的函数current_datetime
。这是查看功能。每个视图函数都将一个HttpRequest
对象作为其第一个参数,该参数通常被命名request
。
该视图返回一个HttpResponse
包含生成的响应的对象。每个视图函数负责返回一个HttpResponse
对象。(有例外,但我们会在稍后讨论。)
最后将url映射到视图即可。
二、返回一个错误页面
返回一个HTTP错误代码非常容易在Django中,HttpResponse除了200以外,还有很多常见的HTTP状态代码的子类(意思是'OK'),您可以在请求/响应 文档中找到可用子类的完整列表。只需返回其中一个子类的实例。
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>')
三、返回一个404异常
Django提供了一个Http404错误页面实例
from django.http import Http404 from django.shortcuts import render 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(request, 'polls/detail.html', {'poll': p})
四、自定义错误视图
Django中的默认错误视图应该足以满足大多数Web应用程序的需求,但是如果您需要任何自定义行为,则可以轻松覆盖它们。只需在URLconf中指定处理程序,如下所示(在其他地方设置它们将不起作用)。
该page_not_found()
视图被以下内容覆盖 handler404
:
handler404 = 'mysite.views.my_custom_page_not_found_view'
该server_error()
视图被以下内容覆盖 handler500
:
handler500 = 'mysite.views.my_custom_error_view'
该permission_denied()
视图被以下内容覆盖 handler403
:
handler403 = 'mysite.views.my_custom_permission_denied_view'
该bad_request()
视图被以下内容覆盖 handler400
:
handler400 = 'mysite.views.my_custom_bad_request_view'