117.状态码错误处理

错误处理

在一些网站开发中,经常会需要捕获一些错误,然后将这些错误返回比较优美的界面,或者是将这些错误的请求做一些日志保存。

常见的错误码:

1.404:服务器没有指定的url。

2.403:没有权限访问相关的数据。

3.405:请求的method错误。

4.400:bad request,请求的参数错误。

5.500:服务器内部错误,一般是代码出bug。

6.502:一般是部署的时候见得多,一般是nginx启动了,然后uwsgi有问题。

自定义错误模板:

在碰到比如404,500错误的时候,想要返回自己定义的模板,那么可以直接在templates文件夹下创建相应的代码html模板文件。发生相应的错误之后,会将指定的模板返回回去。

需要注意的是,如果想要自己定义的状态码模板起作用的话,就要在settings.py文件中设置:DEBUG = False(一定要设置DEBUG为False,如果设置DEBUG为True,就不会渲染定义的错误的状态码的文件,只是会返回一个错误:告诉用户哪个地方出错了。)和ALLOWED_HOSTS = ['127.0.0.1'](将DEBUG设置为False之后,就要设置ALLOWED_HOSTS即可以使用哪个ip地址进行访问。)

错误处理的解决方案:

对于404和500这种自动抛出的错误。我们可以直接在templates文件夹下新建相应的错误代码的模板文件。而对于其他的错误,我们可以专门定义一个app,用来处理这些错误。
1. 500的错误:代码中出现bug。示例代码如下:
from django.http import HttpResponse


def index(request):
    a = 2
    b = 0
    c = a/b
    return c
<!--因为分母不能为0,所以此时就会出现500的错误,即服务器端的diamante出现bug。-->
2. 400的错误:在浏览器中输入一个错误的url,就会出现404错误。
3.403错误:用户没有权限访问该页面。比如,定义一个用户在访问http://127.0.0.1:3000/页面的时候要传入一个?username=xxx,才能够访问该页面,否者的话,就会返回一个自定义的403.html。示例代码如下:
# 1. 在项目下新建一个views.py文件,定义一个index视图,
from django.shortcuts import render, redirect, reverse
from django.http import HttpResponse


def index(request):
    username = request.GET.get('username')
    if username:
        return HttpResponse('success')
    else:
        return redirect(reverse('errors:403'))
        
# 2. 在urls.py文件中进行视图与url之间的映射,示例代码如下:
from django.urls import path, include
urlpatterns = [
    path('errors/', include('errors.urls')),
]

# 3. 在errorsAPP下的templates文件中创建403.html,
# 并且在errors中的views.py文件中定义403的视图函数,示例代码如下:
from django.shortcuts import render


def view_403(request):
    return render(request, 'errors/static/403.html')

# 4.在errors下的urls.py文件中定义视图函数与url之间的映射,示例代码如下:
from django.urls import path
from . import views

app_name = 'errors'

urlpatterns = [
    # 可以定义返回错误的页面的url为html
    path('403.html', views.view_403, name='403'),
    path('405.html', views.view_405, name='405'),
]

始于才华,忠于颜值;每件事情在成功之前,看起来都是天方夜谭。一无所有,就是无所不能。
原文地址:https://www.cnblogs.com/guyan-2020/p/12306207.html