Django 异常¶
Django 会引发一些自己的异常以及标准的 Python 异常。
Django 核心异常¶
Django 核心异常类定义在 django.core.exceptions
中。
ObjectDoesNotExist
¶
-
exception
ObjectDoesNotExist
[源代码]¶ Model.DoesNotExist
异常的基类。一个对ObjectDoesNotExist
的try/except
将捕获对所有模型的DoesNotExist
异常。参见
get()
。
EmptyResultSet
¶
FullResultSet
¶
如果查询将匹配所有内容,查询生成过程中可能会引发 FullResultSet
异常。大多数 Django 项目不会遇到此异常,但在实现自定义查找和表达式时可能会有用。
FieldDoesNotExist
¶
MultipleObjectsReturned
¶
-
exception
MultipleObjectsReturned
[源代码]¶ Model.MultipleObjectsReturned
异常的基类。一个对MultipleObjectsReturned
的try/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:`日志文档 `。
当提交的文件过多时,将引发 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
¶
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.ProtectedError
是 IntegrityError
的子类。
-
exception
models.
RestrictedError
¶
当使用 django.db.models.RESTRICT
时,为了防止删除引用对象而引发的 models.RestrictedError
是 IntegrityError
的子类。
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 文档。