Django:当数据库关闭/无法连接时,如何处理异常?

mo49yndu  于 2023-01-10  发布在  Go
关注(0)|答案(2)|浏览(161)

我们的django应用程序遇到了问题。有时,数据库崩溃/连接太多等,Django不断地引发异常。
我们如何捕获这些异常并将用户重定向到错误页面?

zwghvu4y

zwghvu4y1#

如果要显示错误500的自定义页面,然后将异常保存在日志中,请执行以下步骤:
1.要查看异常,您可以使用here中的日志设置。
1.在应用程序templates/errors/文件夹中创建新的HTML文件error_500.html
1.将视图函数error_500添加到应用的views.py
定义错误_500(请求):返回渲染(请求,“错误/错误_500.html”)
1.将路由添加到urls.py(主站点或应用中的站点)。例如
从django.conf.urls导入handler 404,handler 500从YOURAPP导入视图为yourapp_views
处理程序404 =您的应用程序视图错误404处理程序500 =您的应用程序视图错误500
从现在开始,在 * 生产 * 模式(DEBUG=0,ALLOWED_HOSTS被设置,以WSGI运行等)下,当异常发生时,Django应该显示error_500. html的内容作为Error 500页面。您将在系统日志中看到更多信息。

zz2j4svz

zz2j4svz2#

使用下面**test视图**中的DatabaseError,您将能够处理所有数据库异常,然后在发生数据库异常时将用户重定向到错误页面:

# "views.py"

from django.db import transaction, DatabaseError 
from django.shortcuts import redirect, render
from .models import Person

@transaction.atomic
def test(request):
    try:
        obj = Person.objects.get(id=2)
        obj.name = "David"
        obj.save()
    except DatabaseError as e:
        return redirect("/error-page/")

    return render(request, 'myapp/success.html')
  • 在Django文档中,你可以检查数据库异常,在PEP 249中,你可以检查导致数据库异常的原因。例如,OperationalError是由意外断开连接,语句超时,更新丢失和写入偏差等情况引起的。

相关问题