Django 异常(24)
本文是Django教程的一部分,您可以点击Django教程系列查看所有教程。
Django 异常介绍
异常可以定义为将程序的正常执行偏离到异常状态的事件。异常策略中的 try 和 exception 块有助于处理这些异常。这些面向 Python 的异常被广泛归类为深层。从 django 的角度来看,django 框架拥有自己的一组异常。所有这些在 django 框架下标记的异常都被认为是为了解决 django 框架中产生的各种可能的异常场景而创建的。下面简要介绍了这些分类的 Django 异常集及其可能发生的实例。
标准 Django 例外列表
以下是在 Django 设置中触发的整体标准异常列表,
AppRegistryNotReady:有两种情况可能会触发此错误,第一种是在成功加载应用程序之前尝试使用与 django 设置关联的模型。其次是在 INSTALLED_APPS 目录中放置一个无效的应用程序。所以放置一个不能成功导入的应用也会抛出这个错误。这个错误更多地与 settings.py 文件中的 INSTALLED APPS 部分有关。
SESSION_ENGINE = 'django.contrib.sessions.backends.cache'
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.locmem.LocMemCache'
}
}
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.postgres',
'Django_app1'
]
- ObjectDoesNotExist:当一个对象不是相应模型的一部分时,就会触发错误 objectDoesNotExit。此异常是DoesNotExist 异常的基类。
- FieldDoesNotExist:该字段不存在当尝试的字段不是数据库或引用的模型的一部分时会触发错误。这意味着当触发的查询中的已尝试字段不是 models.py 文件中生成的模型的一部分时,django 框架将触发 FieldDoesNotExist 错误。当尝试的字段不是该模型的有效部分或模型的父项时,模型的 _meta.get_field() 会引发此错误。
- MultipleObjectsReturned:当查询返回的多个对象存在差异时,会引发此异常。因此,在查询数据库时,如果查询期望返回一个对象的响应,但在执行情况下,如果传递了多个对象作为查询的输出,则 django 框架将触发多对象异常。此异常的基本版本在核心中继承。异常类,基本上每个模型类都将持有一个子类版本,这将有助于确定返回多个对象的对象类型。
- SuspiciousOperation:所有被django框架认为可疑的操作都会被标记在可疑操作的异常下。属于安全等级的更主要的异常被认为是可疑操作异常。此可疑操作异常细分为子类异常,如下所列。
- DisallowedHost
- DisallowedModelAdminLookup
- DisallowedModelAdminToField
- DisallowedRedirect
- InvalidSessionKey
- RequestDataTooBig
- SuspiciousFileOperation
- SuspiciousMultipartForm
- SuspiciousSession
- TooManyFieldsSent
- PermissionDenied:当用户对尝试的实体没有合适的访问权限或权限时,会引发权限被拒绝异常。这是一个面向访问的异常。在大多数情况下,面向安全的问题将被标记在此异常下并作为权限被拒绝的实例触发。此异常在稳定应用程序方面提供了额外的完整性。
- ViewDoesNotExist:此异常主要由 url.py 文件引发。当 urls.py 文件中提到的尝试视图不存在于实际的 views.py 文件中时,将引发 ViewDoesNotExist 错误。也可以有条件地引发此异常。
例子:
from django.shortcuts import render
from django.http import HttpResponse
from Django_app1.forms import Valueform
from django.core.exceptions import ViewDoesNotExist
from django.contrib.auth.models import User
deftemplate_view(request_iter):
template_Var= {
"Entity_name": "Educba",
"Entity_type" : "tutorial",
"Entity_students_count": 345,
"Error_Message": "No Valid Entity found"
}
return render(request_iter,'design.html',context=template_Var)
defformView(request_iter):
form = Valueform()
if request_iter.method == "POST":
value = Valueform(request_iter.POST)
if value.is_valid():
first_name = value.cleaned_data['first_name'] if request_iter.session.has_key(first_name):
print(request_iter.session.items())
return render(request_iter, 'Session.html' )
else:
request_iter.session[first_name] = first_name
return render(request_iter, 'Form_Handeling.html', {"form":form})
else:
raise ViewDoesNotExist("!!! INVALID VIEW !!!")
return render(request_iter, 'Form_Handeling.html', {"form":form})
- ImproperlyConfigured: django框架中连接django的数据库没有正确配置时,会引发配置不正确的异常。因此,当数据库出现连接问题时,就会触发配置不当的异常。
例子:
Base.py(引发异常的源代码):
def databases(self):
if self._databases is None:
self._databases = settings.DATABASES
if self._databases == {}:
self._databases = {
DEFAULT_DB_ALIAS: {
'ENGINE': 'django.db.backends.dummy',
},
}
if DEFAULT_DB_ALIAS not in self._databases:
raise ImproperlyConfigured("You must define a '%s' database." % DEFAULT_DB_ALIAS)
if self._databases[DEFAULT_DB_ALIAS] == {}:
self._databases[DEFAULT_DB_ALIAS]['ENGINE'] = 'django.db.backends.dummy'
return self._databases
Base.py(触发异常的框架源代码):
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
异常快照:
- MiddlewareNotUsed :如果 django 项目的中间件设置存在问题,则会引发此问题。这个问题的常见实例是提到的中间件没有在项目的 SETTINGS.py 文件中正确配置。当这些中间件配置中存在有效问题时,这些问题将作为中间件配置问题提出。
SETTINGS.py(中间件配置):
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
- FieldError:由于数据库中包含许多字段,因此数据库中提到的字段可能无效,或者在其存在或检索时遇到某种问题。Django 中的字段错误异常提到了这些在字段级别上分类的异常集。
- ValidationError:有多种方法可以验证字段中的数据,以便它们需要一致性。这些验证可以通过自定义和默认验证实体来实现。因此,从这些验证引发的异常被标记为验证错误异常。
总结
这是 Django 异常的指南。在这里,我们还将讨论总体标准异常的介绍和列表以及示例及其代码实现。
常见问题FAQ
- 程序仅供学习研究,请勿用于非法用途,不得违反国家法律,否则后果自负,一切法律责任与本站无关。
- 请仔细阅读以上条款再购买,拍下即代表同意条款并遵守约定,谢谢大家支持理解!