Django 异常

Django 会引发一些自己的异常以及标准的 Python 异常。

Django 核心异常

Django 核心异常类定义在 django.core.exceptions 中。

AppRegistryNotReady

exception AppRegistryNotReady[源代码]

当在初始化 ORM 的 应用加载过程 完成之前,试图使用模型时,就会引发这个异常。

ObjectDoesNotExist

exception ObjectDoesNotExist[源代码]

Model.DoesNotExist 异常的基类。一个对 ObjectDoesNotExisttry/except 将捕获对所有模型的 DoesNotExist 异常。

参见 get()

EmptyResultSet

exception EmptyResultSet[源代码]

如果一个查询不返回任何结果,那么 EmptyResultSet 可能会在生成查询的过程中被触发。大多数 Django 项目不会遇到这个异常,但它可能对实现自定义查找和表达式很有用。

FullResultSet

exception FullResultSet[源代码]

New in Django 4.2:

如果查询将匹配所有内容,查询生成过程中可能会引发 FullResultSet 异常。大多数 Django 项目不会遇到此异常,但在实现自定义查找和表达式时可能会有用。

FieldDoesNotExist

exception FieldDoesNotExist[源代码]

当请求的字段在模型或模型的父类上不存在时,模型的 _meta.get_field() 方法会引发 FieldDoesNotExist 异常。

MultipleObjectsReturned

exception MultipleObjectsReturned[源代码]

Model.MultipleObjectsReturned 异常的基类。一个对 MultipleObjectsReturnedtry/except 将捕获对所有模型的 MultipleObjectsReturned 异常。

参见 get()

SuspiciousOperation

exception SuspiciousOperation[源代码]

SuspiciousOperation 异常是在用户进行了从安全角度看应该被认为是可疑的操作时产生的,例如篡改会话 cookie。SuspiciousOperation 的子类包括:

  • DisallowedHost
  • DisallowedModelAdminLookup
  • DisallowedModelAdminToField
  • DisallowedRedirect
  • InvalidSessionKey
  • RequestDataTooBig
  • SuspiciousFileOperation
  • SuspiciousMultipartForm
  • SuspiciousSession
  • TooManyFieldsSent
  • TooManyFilesSent

如果一个 SuspiciousOperation 异常达到 ASGI/WSGI 处理程序级别,它将被记录在 Error 级别,并导致一个 HttpResponseBadRequest。更多信息请参见 :doc:`日志文档 `

Changed in Django 3.2.18:

当提交的文件过多时,将引发 SuspiciousOperation 异常。

PermissionDenied

exception PermissionDenied[源代码]

PermissionDenied 异常是在用户没有权限执行所请求的操作时发生的。

ViewDoesNotExist

exception ViewDoesNotExist[源代码]

当请求的视图不存在时, ViewDoesNotExist 异常由 django.urls 引发。

MiddlewareNotUsed

exception MiddlewareNotUsed[源代码]

当服务器配置中没有使用中间件时,会引发 MiddlewareNotUsed 异常。

ImproperlyConfigured

exception ImproperlyConfigured[源代码]

ImproperlyConfigured 异常是在 Django 配置不当的情况下产生的,例如,settings.py 中的一个值不正确或无法解析。

FieldError

exception FieldError[源代码]

FieldError 异常是在模型字段出现问题时引发的。发生这种情况有几种原因:

  • 模型中的一个字段与抽象基类中的同名字段发生冲突
  • 无限循环是由排序引起的
  • 不能从过滤器参数中解析关键字
  • 一个字段不能通过查询参数中的关键字来确定
  • 不允许在指定字段上进行 join
  • 字段名无效
  • 查询包含无效的 order_by 参数

ValidationError

exception ValidationError[源代码]

当数据未能通过表单或模型字段验证时,会引发 ValidationError 异常。关于验证的更多信息,请参见 表单和字段验证模型字段验证验证器参考

NON_FIELD_ERRORS

NON_FIELD_ERRORS

ValidationError 不属于表格或模型中某一特定字段的错误被归类为 NON_FIELD_ERRORS。这个常量在字典中被用作键,否则就会将字段映射到它们各自的错误列表中。

BadRequest

exception BadRequest[源代码]

BadRequest 异常是在请求由于客户端错误而不能被处理时引发的。如果一个 BadRequest 异常到达 ASGI/WSGI 处理程序级别,它会导致一个 HttpResponseBadRequest

RequestAborted

exception RequestAborted[源代码]

RequestAborted 异常是在处理程序正在读入的 HTTP 主体被中途切断和客户端连接关闭时,或者在客户端没有发送数据和遇到服务器关闭连接的超时时引发的。

它是 HTTP 处理模块内部的,你不太可能在其他地方看到它。如果你正在修改 HTTP 处理代码,你应该在遇到一个中止的请求时提出这个问题,以确保 socket 被干净地关闭。

SynchronousOnlyOperation

exception SynchronousOnlyOperation[源代码]

当只有在同步 Python 代码中才允许的代码被从异步上下文(一个有正在运行的异步事件循环的线程)中调用时,会引发 SynchronousOnlyOperation 异常。Django 的这些部分一般都严重依赖线程安全来运行,在协程共享同一个线程的情况下无法正常工作。

如果你想从一个异步线程中调用只用于同步的代码,那么就创建一个同步线程并在该线程中调用它。你可以通过 asgiref.sync.sync_to_async() 来实现。

URL 解析器异常

URL 解析器异常定义在 django.urls 中。

Resolver404

exception Resolver404

resolve() 如果传递给 resolve() 的路径没有映射到视图,那么 Resolver404 异常就会被 resolve() 引发。这是 django.http.Http404 的一个子类。

NoReverseMatch

exception NoReverseMatch

NoReverseMatch 异常是由 django.urls 引发的,当你的 URLconf 中不能根据提供的参数识别出一个匹配的 URL 时会引发。

数据库异常

数据库异常可以从 django.db 导入。

Django 封装了标准的数据库异常,这样你的 Django 代码就可以保证这些类的通用实现。

exception Error

exception InterfaceError

exception DatabaseError

exception DataError

exception OperationalError

exception IntegrityError

exception InternalError

exception ProgrammingError

exception NotSupportedError

数据库异常的 Django 包装器的行为与底层数据库异常完全相同。更多信息请参见 PEP 249,Python 数据库 API 规范 v2.0。

根据 PEP 3134__cause__ 属性与原始(基础)数据库异常一起设置,允许访问提供的任何附加信息。

exception models.ProtectedError

当使用 django.db.models.PROTECT 时,为了防止删除引用对象而引发的 models.ProtectedErrorIntegrityError 的子类。

exception models.RestrictedError

当使用 django.db.models.RESTRICT 时,为了防止删除引用对象而引发的 models.RestrictedErrorIntegrityError 的子类。

HTTP 异常

HTTP 异常可以从 django.http 导入。

UnreadablePostError

exception UnreadablePostError

UnreadablePostError 在用户取消上传时引发。

会话异常

会话异常在 django.contrib.session.exceptions 中定义。

SessionInterrupted

exception SessionInterrupted[源代码]

SessionInterrupted 是当一个会话在一个并发请求中被破坏时引发的。它是 BadRequest 的一个子类。

事务异常

事务异常在 django.db.transaction 中定义。

TransactionManagementError

exception TransactionManagementError

TransactionManagementError 是针对与数据库事务有关的任何和所有问题提出的。

测试框架异常

django.test 包提供的异常。

RedirectCycleError

exception client.RedirectCycleError

RedirectCycleError 当测试客户端检测到一个循环或过长的重定向链时,就会引发。

Python 异常

Django 也会在适当的时候引发内置的 Python 异常。更多关于 Built-in Exceptions 的信息请参见 Python 文档。