Django 会引发一些自己的异常以及标准的 Python 异常。
Django 核心异常类定义在 django.core.exceptions
中。
ObjectDoesNotExist
¶ObjectDoesNotExist
[源代码]¶Model.DoesNotExist
异常的基类。一个对 ObjectDoesNotExist
的 try/except
将捕获对所有模型的 DoesNotExist
异常。
参见 get()
。
EmptyResultSet
¶FieldDoesNotExist
¶MultipleObjectsReturned
¶MultipleObjectsReturned
[源代码]¶Model.MultipleObjectsReturned
异常的基类。一个对 MultipleObjectsReturned
的 try/except
将捕获对所有模型的 MultipleObjectsReturned
异常。
参见 get()
。
SuspiciousOperation
¶SuspiciousOperation
[源代码]¶SuspiciousOperation
异常是在用户进行了从安全角度看应该被认为是可疑的操作时产生的,例如篡改会话 cookie。SuspiciousOperation
的子类包括:
DisallowedHost
DisallowedModelAdminLookup
DisallowedModelAdminToField
DisallowedRedirect
InvalidSessionKey
RequestDataTooBig
SuspiciousFileOperation
SuspiciousMultipartForm
SuspiciousSession
TooManyFieldsSent
如果一个 SuspiciousOperation
异常达到 ASGI/WSGI 处理程序级别,它将被记录在 Error
级别,并导致一个 HttpResponseBadRequest
。更多信息请参见 :doc:`日志文档 `。
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 body 在传输流中被切断,客户端连接关闭,或者客户端不发送数据,遇到超时,服务器关闭连接时引发的。
它是 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 文档。
5月 26, 2021