Django 中的内置错误视图
每当有人尝试访问网站上不存在的链接时,都会出现 404 错误,即找不到此页面。同样的,错误码也比较多,比如500、403等。Django有一些默认的函数来处理HTTP错误。让我们一一探索它们。
Django 中的内置错误视图 –
404 视图(页面未找到) –
通常,当请求的 URL 在服务器上不可用时,此视图用于呈现基本 404 模板。这种情况在默认情况下会发生 Django 引发django.views.defaults.page_not_found()视图并呈现 default404 错误模板。您可以通过在模板文件夹中添加自定义 404.html 页面来自定义它。
500 视图(服务器错误)–
当服务器崩溃或没有任何响应时使用此视图。在这种情况下,Django 具有默认函数django.views.defaults.server_error()来呈现此视图的服务器错误。您还可以通过在模板文件夹中添加 500.html 页面来自定义它。
403视图(禁止) -
当用户无权查看特定页面但他/她请求查看该页面时。在这种情况下,403 视图开始发挥作用。它说页面被禁止并且不会向该用户显示页面。为此,Django 有django.views.defaults.permission_denied()函数来呈现禁止模板。它维护您的隐私,只有被允许的用户才能访问某些页面。您还可以通过在模板文件夹中添加 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()为任何类型的SuspiciousOperation 引发 400 视图。这可以防止您的网站受到坏人的影响。
自定义 Django 中的内置错误视图 –
现在,让我们看看如何自定义这些错误视图。首先,您需要进入 settings.py 并设置 Debug=False。
DEBUG = False
ALLOWED_HOSTS = ['localhost', '127.0.0.1']
在项目中创建文件夹并将其命名为任何内容,在这里我给该文件夹命名为“模板”。现在转到 settings.py 并设置模板目录。
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)
现在,您已准备好运行服务器并查看您制作的这些错误处理页面。
To run server: python manage.py runserver