Django的内置错误视图
每当人们试图访问一个网站上不存在的链接时,就会出现404错误,即找不到这个页面。同样的,还有更多的错误代码,如500、403等。Django有一些默认函数来处理HTTP错误。让我们逐一来探讨一下。
Django中的内置错误视图
404视图(未找到页面)
通常情况下,当请求的URL在服务器上不可用时,这个视图会被用来渲染基本的404模板。这种情况发生时,Django默认会引发django.views.defaults.page_not_found()视图并渲染默认的404错误模板。你可以通过在templates文件夹中添加自定义404.html页面来定制它。
**500视图(服务器错误) **
当服务器崩溃或没有任何反应时,这个视图就会被使用。在这种情况下,Django有默认函数django.views.defaults.server_error()来渲染这个视图的服务器错误。你也可以通过在templates文件夹中添加你的500.html页面来定制它。
403视图(禁止)
当用户没有权限查看特定页面,但他/她要求查看该页面。在这种情况下,403视图就会发挥作用。它说这个页面是被禁止的,不会向该用户显示该页面。为此,Django有django.views.defaults.permission_denied()函数来呈现禁止的模板。它可以维护你的隐私,只有被允许的用户才能访问某些页面。你也可以通过在templates文件夹中添加你的403.html页面来定制它。
假设你有一个电子商务网站,你只想让经过认证的商户列出产品。买家和普通用户不能列出他们的产品。你可以像这样在Django中添加这个功能。
from django.core.exceptions import PermissionDenied
def upload(request, pk):
if not request.user.is_merchant:
raise PermissionDenied
# your code here.....
400视图(错误请求)
当有人试图访问你网站的机密页面时,Django会使用400视图或坏请求视图,这可能导致你的网站被黑客攻击或泄露机密数据。因此,你不希望任何人访问该页面。Django有django.views.defaults.bad_request(),可以对任何形式的可疑操作提出400个视图。这可以防止你的网站被Bad peoples攻击。
在Django中定制内置的错误视图
现在,让我们看看如何定制这些错误视图。首先,你需要进入settings.py并设置Debug=False。
DEBUG = False
ALLOWED_HOSTS = ['localhost', '127.0.0.1']
在项目中建立文件夹,并给它命名,这里我给这个文件夹命名为 “templates”。现在进入settings.py并设置templates目录。
TEMPLATE_DIR = os.path.join(BASE_DIR, 'templates')
现在,在模板目录内你可以创建html文件’404.html’、’500.html’、’403.html’、’400.html’等。在创建这些页面后,展示你的HTML技能,并自己定制页面。在settings.py中添加你的应用程序名称。
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'jquery',
**'geeks'**
]
在urls.py中添加处理方法
handler404 = 'myappname.views.error_404'
handler500 = 'myappname.views.error_500'
handler403 = 'myappname.views.error_403'
handler400 = 'myappname.views.error_400'
现在在views.py中设置逻辑来显示这些页面
from django.shortcuts import render
def error_404(request, exception):
return render(request,'404.html')
def error_500(request, exception):
return render(request,'500.html', data)
def error_403(request, exception):
return render(request,'403.html')
def error_400(request, exception):
return render(request,'400.html', data)
现在,你都准备好了,可以运行服务器,看到你做的这些错误处理页面。
要运行服务器:python manage.py runserver。