首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

django中调用update view时匹配查询不存在

在Django中,当调用update view时,如果匹配的查询结果不存在,会返回一个404错误页面。这是因为Django的update view是基于模型的视图,它会根据URL中的参数来查询数据库中的对象,并将其传递给模板进行更新操作。如果没有找到匹配的对象,Django会自动抛出一个Http404异常,然后返回一个404错误页面。

在处理这种情况时,可以通过以下几种方式来处理:

  1. 检查查询结果是否为空:在调用update view之前,可以先进行查询操作,并检查查询结果是否为空。如果为空,可以选择返回一个自定义的错误页面或者重定向到其他页面。
  2. 使用get_object_or_404函数:Django提供了一个便捷的函数get_object_or_404,它可以在查询结果为空时自动抛出Http404异常。可以在update view中使用这个函数来处理查询不存在的情况,例如:
代码语言:txt
复制
from django.shortcuts import get_object_or_404

def update_view(request, pk):
    obj = get_object_or_404(MyModel, pk=pk)
    # 进行更新操作
    ...

这样,如果查询结果为空,Django会自动抛出Http404异常,并返回一个404错误页面。

  1. 自定义异常处理器:可以通过自定义异常处理器来处理404错误页面,以提供更好的用户体验。可以在项目的urls.py文件中定义一个404错误处理视图,例如:
代码语言:txt
复制
from django.shortcuts import render

def handler404(request, exception):
    return render(request, '404.html', status=404)

然后在配置文件中指定这个自定义的处理器:

代码语言:txt
复制
# settings.py
...
'handlers': {
    '404': {
        'level': 'ERROR',
        'class': 'django.utils.log.AdminEmailHandler',
    },
},
...
'loggers': {
    'django.request': {
        'handlers': ['404'],
        'level': 'ERROR',
        'propagate': True,
    },
},
...

这样,当调用update view时,如果查询结果不存在,会自动调用这个自定义的处理器,返回一个自定义的404错误页面。

总结起来,当在Django中调用update view时,如果匹配的查询结果不存在,可以通过检查查询结果是否为空、使用get_object_or_404函数或者自定义异常处理器来处理这种情况。这样可以提供更好的用户体验,并避免出现未处理的404错误页面。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

drf之请求、响应、视图

APIView与View的不同之处在于: 传入到视图方法的是REST framework的Request对象,而不是Django的HttpRequeset对象; 视图方法可以返回REST framework...提供的关于序列化器使用的属性与方法 属性:serializer_class  指明视图使用的序列化器 方法: get_serializer_class(self) : 当出现一个视图类调用多个序列化器...在试图中可以调用该方法获取详情信息的模型类对象。**若详情访问的模型类对象不存在,会返回404。...**ViewSet主要通过继承ViewSetMixin来实现在调用as_view()传入字典(如{‘get’:’list’})的映射处理工作。...GenericViewSet就帮助我们完成了这样的继承工作,继承自GenericAPIView与ViewSetMixin,在实现了调用as_view()传入字典(如{'get':'list'})的映射处理工作的同时

2.1K20

后端框架学习-Django

V 表示视图(View):负责业务逻辑,并在适当时候调用 Model和 Template。...才需要用到 urls.py:项目主路由配置-HTTP请求进入Django,有限调用 settings.py:项目的配置文件-包含项目启动需要的配置。...path:匹配非空字段,包括路径分隔符‘/’ re_path函数: 正则匹配,更加精密的匹配规则 re_path(reg,view,name = xx) 正则表达式为命名分组模式(?...代码每次变化,都需要重启Django Shell ORM 查询操作 通过管理器对象进行 通过MyModel.objects管理器方法调用查询方法 方法 all() 用法:MyModel.objects.all...查询谓词 类属性 + ‘__’ + 谓词 定义:做更灵活的条件查询需要使用查询谓词 说明:每一个查询谓词都是一个独立的查询功能 __exact:等值匹配 Author.objects.filter

9.5K40
  • 08.Django基础六之ORM的锁和事务

    举个例子: entries = Entry.objects.select_for_update().filter(author=request.user) #加互斥锁,由于mysql在查询自动加的是共享锁...create、update、delete操作,mysql自动加行级互斥锁     所有匹配的行将被锁定,直到事务结束。这意味着可以通过锁防止数据被其它事务修改。     ...它是这样工作的:当有请求过来时,Django会在调用视图方法前开启一个事务。如果请求却正确处理并正确返回了结果,Django就会提交该事务。否则,Django会回滚该事务。...(using='other') def my_other_view(request): do_stuff_on_the_other_database()     但是Django 文档说,不推荐这么做...因为如果将事务跟 HTTP 请求绑定到一起的,然而view 是依赖于应用程序对数据库的查询语句效率和数据库当前的锁竞争情况。

    2.2K40

    django框架菜鸟教程_django框架菜鸟教程

    路由解析顺序 Django在接收到一个请求,从主路由文件的urlpatterns列表以由上至下的顺序查找对应路由规则,如果发现规则为include包含,则再进入被包含的urls的urlpatterns...定义路由,通常以斜线/结尾,其好处是用户访问不以斜线/结尾的相同路径Django会把用户重定向到以斜线/结尾的路径上,而不会返回404不存在 。...五、类视图与中间件 1、类视图 定义:使用类来定义的视图 好处: 可读性好 更高的复用性 使用 from django.view.generic import View 配置路由,使用类视图的as_view...()方法来添加 原理 在注册路由规则类.as_view()返回方法名 在请求路径与正则匹配成功后,方法会被执行 调用dispatch()方法 根据请求方式名称获取方法 执行方法 使用装饰器...():判断查询集中是否有数据,有返回Ture,无返回False 2、特性 惰性执行:创建查询集的时候不会调用数据库,调用数据的时候访问,迭代、序列化、if合用 缓存 3、限制查询集 对查询集进行下标或切片操作

    3K40

    【愚公系列】2022年04月 Python教学课程 61-Django框架Resful接口

    文章目录 一、Resful接口介绍 二、相关案例 1.DjangoResful路由代码 2.DjangoResful业务代码 总结 一、Resful接口介绍 RESTFUL是一种网络应用程序的设计风格和开发方式...RESTFUL适用于移动互联网厂商作为业务接口的场景,实现第三方OTT调用移动网络资源的功能,动作类型为新增、变更、删除所调用资源。...二、相关案例 1.DjangoResful路由代码 from django.conf.urls import url from django.contrib import admin from . import...P\d+)/$',views.BookView.as_view() ), ] 2.DjangoResful业务代码 import os from django.shortcuts import render..., reverse from django.views import View from book.models import BookInfo, HeroInfo from django.conf import

    53220

    Django

    (基于函数的视图:前面的都是) """ form django.views import View class add_list(View): # urls调用时使用类名add_list ,会根据请求方式转到对应方法...url,path(2.0以后)(正则,函数名,参数,别名) ] r"^book/[0-9]{2,4}/$" r"^book/([0-9]{2,4})/([a-zA-Z]{2})/$" 分组匹配...,用于代替反向查询的"表名_set" # related_query_name 反向查询操作,使用的链接前缀,用于替换表明 # on_delete 当删除关联表的数据,当前表与其的关联行为...) 使用装饰器 # get,post (self,request) 装饰器第一个参数是request,不匹配 # 解决方案:form django.utils.decorators import...调用 # 注册的中间件里面五个方法的顺序: # 1. # process_request # urls.py # 2. # process_view # view # 3. # 有异常就执行 # process_exception

    3.5K20

    Django相关知识点回顾

    url(r'^', include('users.urls')) ] 在访问后端接口的时候,会先到总的urls文件中进行匹配子应用,匹配到后再到子应用的urls文件中进行视图的匹配匹配到后,返回响应...3.MVT模式(Model模型、View视图、Template模板) 5.URL配置 Django默认url配置风格是在末尾加 /,在子应用中进行url地址配置的时候,建议严格匹配开头和结尾。....直接在url配置手动调用装饰器函数来实现装饰器添加 urlpattern = [ url(r'^demo/$', my_cecorate(DemoView.as_view())) ] 2.使用...修改 查询对象->修改对象属性->对象.save() 或者: 模型类.objects.filter(...).update(...)...查询结果的缓存 使用同一个查询,只有在第一次使用查询集时会进行数据库的查询操作,然后Django框架就会把查询的结果存起来,下一次再使用这个查询,使用的Django之前存储的结果。

    10K51

    Python的Django框架实现数据库查询(不返回QuerySet的方法)

    聚合操作 in_bulk() 根据主键值的列表,批量返回对象 iterator() 获取包含对象的迭代器 三、以上方法的使用: 1.get()方法: 返回按照查询参数匹配到的单个对象,若匹配到的对象个数不只一个的话...2.update()方法返回受影响的行数。 ​ 3.update()方法还可以防止在加载对象和调用save()之间的短时间内数据库某些内容可能发生更改的竞争条件。...仅是更新一下对象,不需要为对象做其他事情,最有效的方法是调用update(),而不是将模型对象加载到内存中去。...defaults的值可以是可调用对象。...QuerySet通常会再内部缓存其结果,以便再重复计算不会导致额外的查询

    2.6K30

    Django】 Python Web 框架基础

    settings.py Django 项目的配置文件,此配置文件的一些全局变量将为 Django 框架的运行传递一些参数 setting.py 配置文件,启动服务自动调用, 此配置文件也可以定义一些自定义的变量用于作用全局作用域的数据传递...的 URL, 匹配到第一个合适的中断后续匹配 匹配成功 - 调用对应的视图函数处理请求,返回响应 匹配失败 - 返回404响应 # 主路由-urls.py样例: from django.urls import...=None) 参数: route: 字符串类型,匹配的请求路径 views: 指定路径所对应的视图处理函数的名称 name: 为地址起别名,在模板地址反向解析使用 path转换器 思考:建立如上一百个网页该怎么办...url 的匹配过程可以使用正则表达式进行精确匹配 语法: re_path(reg, view, name=xxx) 正则表达式为命名分组模式 (?...name="uname"> GET 请求方式,如果有数据需要传递给服务器,通常会用查询字符串 (Query String) 传递 【注意:不要传递敏感数据】 URL 格式: xxx?

    2.1K20

    Django model select的各种用法详解

    Django model update的各种用法介绍》文章介绍了Django model的各种update操作,这篇文章就是她的姊妹篇,详细介绍Django model select的用法,配以对应...,正常values_list给出的结果是个列表,里边里边的每条数据对应一个元组,当只查询一列,可以使用flat标签去掉元组,将每条数据的结果以字符串的形式存储在列表,从而避免解析元组的麻烦 User.objects.values_list...通常使用下边的方法: _t = User.objects.get(id=734) 但当id=724的数据不存在,程序将会抛出一个错误 abcer.models.DoesNotExist: User matching...import get_object_or_404 _t = get_object_or_404(User, id=724) # get_object_or_404方法,它会先调用django的get...方法,如果查询的对象不存在的话,则抛出一个Http404的异常 实现方法类似于下边这样: from django.http import Http404 try: _t = User.objects.get

    1.1K30

    functools之update_wrapper的使用

    由来 xadmin通过实现自己的BaseAdminView(继承自DjangoView)来完成xadmin后台界面的处理。...在解决一个csrf的问题,翻了下xadmin BaseAdminView和DjangoView部分的代码,关键点少了一条 update_wrapper 使用。导致我的小伙伴调试了半天。...# django/views/generic/base.py:class View的代码 @classonlymethod def as_view(cls, **initkwargs): ""...update_wrapper的用法 上述代码应该挺明显了,update_wrapper的作用就是把cls.dispatch上的所有属性全部赋值到装饰函数上,也就是代码view。...关于保持函数签名,functools提供了两个api,一个是update_wrapper,一个是wrap装饰器函数,但是wrap装饰器函数也是调用update_wrapper。

    1.6K20

    Python Day16 Django

    Django的MTV分别代表: Model(模型):负责业务对象与数据库的对象(ORM) Template(模版):负责如何把页面展示给用户 View(视图):负责业务逻辑,并在适当的时候调用Model...和Template 此外,Django还有一个urls分发器,它的作用是将一个个URL的页面请求分发给不同的view处理,view调用相应的Model和Template URL控制器(路由层) 简单配置...在URL控制器(project/urls.py),给匹配规则起个别名可以解决这个问题,这就叫做反向解析 在需要URL 的地方,对于不同层级,Django 提供不同的工具用于URL 反查: 在模板...有了这个令牌后这个网页再提交POST请求web服务器会做验证,之后才会通过 自定义过滤器和标签 在settings的INSTALLED_APPS配置当前app,不然django无法找到自定义的simple_tag...ret = Book.objects.all().values("price").distinct() print(ret) count(): 返回数据库匹配查询

    1.9K10
    领券