117.状态码错误处理
Posted guyan-2020
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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'),
]
以上是关于117.状态码错误处理的主要内容,如果未能解决你的问题,请参考以下文章
http协议的状态码——400,401,403,404,500,502,503,301,302等常见网页错误代码