Django 会引发一些自己的异常以及标准的 Python 异常。
Django 核心异常类定义在 django.core.exceptions 中。
ObjectDoesNotExist¶ObjectDoesNotExist[源代码]¶Model.DoesNotExist 异常的基类。一个对 ObjectDoesNotExist 的 try/except 将捕获对所有模型的 DoesNotExist 异常。
参见 get()。
EmptyResultSet¶FullResultSet¶FullResultSet may be raised during query generation if a query will
match everything. Most Django projects won't encounter this exception, but
it might be useful for implementing custom lookups and expressions.
FieldDoesNotExist¶MultipleObjectsReturned¶MultipleObjectsReturned[源代码]¶Model.MultipleObjectsReturned 异常的基类。一个对 MultipleObjectsReturned 的 try/except 将捕获对所有模型的 MultipleObjectsReturned 异常。
参见 get()。
SuspiciousOperation¶SuspiciousOperation[源代码]¶SuspiciousOperation 异常是在用户进行了从安全角度看应该被认为是可疑的操作时产生的,例如篡改会话 cookie。SuspiciousOperation 的子类包括:
DisallowedHostDisallowedModelAdminLookupDisallowedModelAdminToFieldDisallowedRedirectInvalidSessionKeyRequestDataTooBigSuspiciousFileOperationSuspiciousMultipartFormSuspiciousSessionTooManyFieldsSentTooManyFilesSent如果一个 SuspiciousOperation 异常达到 ASGI/WSGI 处理程序级别,它将被记录在 Error 级别,并导致一个 HttpResponseBadRequest。更多信息请参见 :doc:`日志文档 `。
SuspiciousOperation is raised when too many files are submitted.
PermissionDenied¶PermissionDenied[源代码]¶PermissionDenied 异常是在用户没有权限执行所请求的操作时发生的。
ViewDoesNotExist¶ViewDoesNotExist[源代码]¶当请求的视图不存在时, ViewDoesNotExist 异常由 django.urls 引发。
MiddlewareNotUsed¶MiddlewareNotUsed[源代码]¶当服务器配置中没有使用中间件时,会引发 MiddlewareNotUsed 异常。
ImproperlyConfigured¶ImproperlyConfigured[源代码]¶ImproperlyConfigured 异常是在 Django 配置不当的情况下产生的,例如,settings.py 中的一个值不正确或无法解析。
FieldError¶FieldError[源代码]¶FieldError 异常是在模型字段出现问题时引发的。发生这种情况有几种原因:
ValidationError¶BadRequest¶BadRequest[源代码]¶BadRequest 异常是在请求由于客户端错误而不能被处理时引发的。如果一个 BadRequest 异常到达 ASGI/WSGI 处理程序级别,它会导致一个 HttpResponseBadRequest。
RequestAborted¶RequestAborted[源代码]¶RequestAborted 异常是在处理程序正在读入的 HTTP 主体被中途切断和客户端连接关闭时,或者在客户端没有发送数据和遇到服务器关闭连接的超时时引发的。
它是 HTTP 处理模块内部的,你不太可能在其他地方看到它。如果你正在修改 HTTP 处理代码,你应该在遇到一个中止的请求时提出这个问题,以确保 socket 被干净地关闭。
SynchronousOnlyOperation¶SynchronousOnlyOperation[源代码]¶当只有在同步 Python 代码中才允许的代码被从异步上下文(一个有正在运行的异步事件循环的线程)中调用时,会引发 SynchronousOnlyOperation 异常。Django 的这些部分一般都严重依赖线程安全来运行,在协程共享同一个线程的情况下无法正常工作。
如果你想从一个异步线程中调用只用于同步的代码,那么就创建一个同步线程并在该线程中调用它。你可以通过 asgiref.sync.sync_to_async() 来实现。
URL 解析器异常定义在 django.urls 中。
Resolver404¶Resolver404¶resolve() 如果传递给 resolve() 的路径没有映射到视图,那么 Resolver404 异常就会被 resolve() 引发。这是 django.http.Http404 的一个子类。
NoReverseMatch¶NoReverseMatch¶NoReverseMatch 异常是由 django.urls 引发的,当你的 URLconf 中不能根据提供的参数识别出一个匹配的 URL 时会引发。
数据库异常可以从 django.db 导入。
Django 封装了标准的数据库异常,这样你的 Django 代码就可以保证这些类的通用实现。
Error¶InterfaceError¶DatabaseError¶DataError¶OperationalError¶IntegrityError¶InternalError¶ProgrammingError¶NotSupportedError¶数据库异常的 Django 包装器的行为与底层数据库异常完全相同。更多信息请参见 PEP 249,Python 数据库 API 规范 v2.0。
根据 PEP 3134,__cause__ 属性与原始(基础)数据库异常一起设置,允许访问提供的任何附加信息。
models.ProtectedError¶当使用 django.db.models.PROTECT 时,为了防止删除引用对象而引发的 models.ProtectedError 是 IntegrityError 的子类。
models.RestrictedError¶当使用 django.db.models.RESTRICT 时,为了防止删除引用对象而引发的 models.RestrictedError 是 IntegrityError 的子类。
HTTP 异常可以从 django.http 导入。
UnreadablePostError¶UnreadablePostError¶UnreadablePostError 在用户取消上传时引发。
会话异常在 django.contrib.session.exceptions 中定义。
SessionInterrupted¶SessionInterrupted[源代码]¶SessionInterrupted 是当一个会话在一个并发请求中被破坏时引发的。它是 BadRequest 的一个子类。
事务异常在 django.db.transaction 中定义。
TransactionManagementError¶TransactionManagementError¶TransactionManagementError 是针对与数据库事务有关的任何和所有问题提出的。
django.test 包提供的异常。
RedirectCycleError¶client.RedirectCycleError¶RedirectCycleError 当测试客户端检测到一个循环或过长的重定向链时,就会引发。
Django 也会在适当的时候引发内置的 Python 异常。更多关于 Built-in Exceptions 的信息请参见 Python 文档。
9月 22, 2023