📜  Django 中的内置错误视图

📅  最后修改于: 2022-05-13 01:55:25.186000             🧑  作者: Mango

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