Django 异常Link to this heading
Django 会引发一些自己的异常以及标准的 Python 异常。
Django 核心异常Link to this heading
Django 核心异常类定义在 django.core.exceptions 中。
AppRegistryNotReadyLink to this heading
- exception AppRegistryNotReadyLink to this definition
当在初始化 ORM 的 应用加载过程 完成之前,试图使用模型时,就会引发这个异常。
ObjectDoesNotExistLink to this heading
- exception ObjectDoesNotExistLink to this definition
Model.DoesNotExist异常的基类。一个对ObjectDoesNotExist的try/except将捕获对所有模型的DoesNotExist异常。参见
get()。
EmptyResultSetLink to this heading
- exception EmptyResultSetLink to this definition
如果一个查询不返回任何结果,那么
EmptyResultSet可能会在生成查询的过程中被触发。大多数 Django 项目不会遇到这个异常,但它可能对实现自定义查找和表达式很有用。
FieldDoesNotExistLink to this heading
- exception FieldDoesNotExistLink to this definition
当请求的字段在模型或模型的父类上不存在时,模型的
_meta.get_field()方法会引发FieldDoesNotExist异常。
MultipleObjectsReturnedLink to this heading
- exception MultipleObjectsReturnedLink to this definition
Model.MultipleObjectsReturned异常的基类。一个对MultipleObjectsReturned的try/except将捕获对所有模型的MultipleObjectsReturned异常。参见
get()。
SuspiciousOperationLink to this heading
- exception SuspiciousOperationLink to this definition
SuspiciousOperation异常是在用户进行了从安全角度看应该被认为是可疑的操作时产生的,例如篡改会话 cookie。SuspiciousOperation的子类包括:DisallowedHostDisallowedModelAdminLookupDisallowedModelAdminToFieldDisallowedRedirectInvalidSessionKeyRequestDataTooBigSuspiciousFileOperationSuspiciousMultipartFormSuspiciousSessionTooManyFieldsSentTooManyFilesSent
如果一个
SuspiciousOperation异常达到 ASGI/WSGI 处理程序级别,它将被记录在Error级别,并导致一个HttpResponseBadRequest。更多信息请参见 :doc:`日志文档 `。
PermissionDeniedLink to this heading
- exception PermissionDeniedLink to this definition
PermissionDenied异常是在用户没有权限执行所请求的操作时发生的。
ViewDoesNotExistLink to this heading
- exception ViewDoesNotExistLink to this definition
当请求的视图不存在时,
ViewDoesNotExist异常由django.urls引发。
MiddlewareNotUsedLink to this heading
- exception MiddlewareNotUsedLink to this definition
当服务器配置中没有使用中间件时,会引发
MiddlewareNotUsed异常。
ImproperlyConfiguredLink to this heading
- exception ImproperlyConfiguredLink to this definition
ImproperlyConfigured异常是在 Django 配置不当的情况下产生的,例如,settings.py中的一个值不正确或无法解析。
FieldErrorLink to this heading
- exception FieldErrorLink to this definition
FieldError异常是在模型字段出现问题时引发的。发生这种情况有几种原因:模型中的一个字段与抽象基类中的同名字段发生冲突
无限循环是由排序引起的
不能从过滤器参数中解析关键字
一个字段不能通过查询参数中的关键字来确定
不允许在指定字段上进行 join
字段名无效
查询包含无效的 order_by 参数
ValidationErrorLink to this heading
- exception ValidationErrorLink to this definition
当数据未能通过表单或模型字段验证时,会引发
ValidationError异常。关于验证的更多信息,请参见 表单和字段验证、 模型字段验证 和 验证器参考。
NON_FIELD_ERRORSLink to this heading
- NON_FIELD_ERRORSLink to this definition
ValidationError 不属于表格或模型中某一特定字段的错误被归类为 NON_FIELD_ERRORS。这个常量在字典中被用作键,否则就会将字段映射到它们各自的错误列表中。
BadRequestLink to this heading
- exception BadRequestLink to this definition
-
BadRequest异常是在请求由于客户端错误而不能被处理时引发的。如果一个BadRequest异常到达 ASGI/WSGI 处理程序级别,它会导致一个HttpResponseBadRequest。
RequestAbortedLink to this heading
- exception RequestAbortedLink to this definition
RequestAborted异常是在处理程序读入的 HTTP body 在传输流中被切断,客户端连接关闭,或者客户端不发送数据,遇到超时,服务器关闭连接时引发的。它是 HTTP 处理模块内部的,你不太可能在其他地方看到它。如果你正在修改 HTTP 处理代码,你应该在遇到一个中止的请求时提出这个问题,以确保 socket 被干净地关闭。
SynchronousOnlyOperationLink to this heading
- exception SynchronousOnlyOperationLink to this definition
当只有在同步 Python 代码中才允许的代码被从异步上下文(一个有正在运行的异步事件循环的线程)中调用时,会引发
SynchronousOnlyOperation异常。Django 的这些部分一般都严重依赖线程安全来运行,在协程共享同一个线程的情况下无法正常工作。如果你想从一个异步线程中调用只用于同步的代码,那么就创建一个同步线程并在该线程中调用它。你可以通过
asgiref.sync.sync_to_async()来实现。
URL 解析器异常Link to this heading
URL 解析器异常定义在 django.urls 中。
Resolver404Link to this heading
- exception Resolver404Link to this definition
resolve()如果传递给resolve()的路径没有映射到视图,那么Resolver404异常就会被resolve()引发。这是django.http.Http404的一个子类。
NoReverseMatchLink to this heading
- exception NoReverseMatchLink to this definition
NoReverseMatch异常是由django.urls引发的,当你的 URLconf 中不能根据提供的参数识别出一个匹配的 URL 时会引发。
数据库异常Link to this heading
数据库异常可以从 django.db 导入。
Django 封装了标准的数据库异常,这样你的 Django 代码就可以保证这些类的通用实现。
- exception ErrorLink to this definition
- exception InterfaceErrorLink to this definition
- exception DatabaseErrorLink to this definition
- exception DataErrorLink to this definition
- exception OperationalErrorLink to this definition
- exception IntegrityErrorLink to this definition
- exception InternalErrorLink to this definition
- exception ProgrammingErrorLink to this definition
- exception NotSupportedErrorLink to this definition
数据库异常的 Django 包装器的行为与底层数据库异常完全相同。更多信息请参见 PEP 249,Python 数据库 API 规范 v2.0。
根据 PEP 3134,__cause__ 属性与原始(基础)数据库异常一起设置,允许访问提供的任何附加信息。
- exception models.ProtectedErrorLink to this definition
当使用 django.db.models.PROTECT 时,为了防止删除引用对象而引发的 models.ProtectedError 是 IntegrityError 的子类。
- exception models.RestrictedErrorLink to this definition
当使用 django.db.models.RESTRICT 时,为了防止删除引用对象而引发的 models.RestrictedError 是 IntegrityError 的子类。
Http 异常Link to this heading
Http 异常可以从 django.http 导入。
UnreadablePostErrorLink to this heading
- exception UnreadablePostErrorLink to this definition
UnreadablePostError在用户取消上传时引发。
会话异常Link to this heading
会话异常在 django.contrib.session.exceptions 中定义。
SessionInterruptedLink to this heading
- exception SessionInterruptedLink to this definition
-
SessionInterrupted是当一个会话在一个并发请求中被破坏时引发的。它是BadRequest的一个子类。
事务异常Link to this heading
事务异常在 django.db.transaction 中定义。
TransactionManagementErrorLink to this heading
- exception TransactionManagementErrorLink to this definition
TransactionManagementError是针对与数据库事务有关的任何和所有问题提出的。
测试框架异常Link to this heading
django.test 包提供的异常。
RedirectCycleErrorLink to this heading
- exception client.RedirectCycleErrorLink to this definition
RedirectCycleError当测试客户端检测到一个循环或过长的重定向链时,就会引发。
Python 异常Link to this heading
Django 也会在适当的时候引发内置的 Python 异常。更多关于 Built-in Exceptions 的信息请参见 Python 文档。