Django 异常
Django 会引发一些自己的异常以及标准的 Python 异常。
Django 核心异常
Django 核心异常类定义在 django.core.exceptions
中。
AppRegistryNotReady
exception AppRegistryNotReady
[源代码]
当在初始化 ORM 的 应用加载过程 完成之前,试图使用模型时,就会引发这个异常。
ObjectDoesNotExist
exception ObjectDoesNotExist
[源代码]
Model.DoesNotExist 异常的基类。一个对 ObjectDoesNotExist
的 try/except
将捕获对所有模型的 DoesNotExist 异常。
参见 get()。
EmptyResultSet
exception EmptyResultSet
[源代码]
如果一个查询不返回任何结果,那么 EmptyResultSet
可能会在生成查询的过程中被触发。大多数 Django 项目不会遇到这个异常,但它可能对实现自定义查找和表达式很有用。
FieldDoesNotExist
exception FieldDoesNotExist
[源代码]
当请求的字段在模型或模型的父类上不存在时,模型的 _meta.get_field()
方法会引发 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
如果一个 SuspiciousOperation
异常达到 ASGI/WSGI 处理程序级别,它将被记录在 Error
级别,并导致一个 HttpResponseBadRequest。更多信息请参见 :doc:`日志文档 `。
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
[源代码]
New in Django 3.2.
BadRequest 异常是在请求由于客户端错误而不能被处理时引发的。如果一个 BadRequest
异常到达 ASGI/WSGI 处理程序级别,它会导致一个 HttpResponseBadRequest。
RequestAborted
exception RequestAborted
[源代码]
The RequestAborted exception is raised when an HTTP body being read in by the handler is cut off midstream and the client connection closes, or when the client does not send data and hits a timeout where the server closes the connection.
它是 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 Exceptions
HTTP exceptions may be imported from django.http
.
UnreadablePostError
exception UnreadablePostError
UnreadablePostError 在用户取消上传时引发。
会话异常
会话异常在 django.contrib.session.exceptions
中定义。
SessionInterrupted
exception SessionInterrupted
[源代码]
New in Django 3.2.
SessionInterrupted 是当一个会话在一个并发请求中被破坏时引发的。它是 BadRequest 的一个子类。
事务异常
事务异常在 django.db.transaction
中定义。
TransactionManagementError
exception TransactionManagementError
TransactionManagementError 是针对与数据库事务有关的任何和所有问题提出的。
测试框架异常
django.test
包提供的异常。
RedirectCycleError
exception client.RedirectCycleError
RedirectCycleError 当测试客户端检测到一个循环或过长的重定向链时,就会引发。
Python 异常
Django 也会在适当的时候引发内置的 Python 异常。更多关于 Built-in Exceptions 的信息请参见 Python 文档。