`
san_yun
  • 浏览: 2639636 次
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

get_object_or_404

 
阅读更多

 

对于此方法只想中总结一点:因为它会使用默认的django.db.models.manager.Manager来执行数据操作,所以如果你在mananger里为默认的get方法添加了cache的话,对get_object_or_404来说是没有效果的。

 

django get_object_or_404 是django shortcuts模块里面一个比较简便的方法,特别是用django get来操作数据库的时候,可以帮 我们少写一些代码,加快开发速度。

get_object_or_404 的介绍: 我们原来调用django 的get方法,如果查询的对象不存在的话,会抛出一个DoesNotExist的异常, 现在我们调用django get_object_or_404方法,它会默认的调用django 的get方法, 如果查询的对象不存在的话,会抛出一个Http404的异常,我感觉这样对用户比较友好, 如果用户查询某个产品不存在的话,我们就显示404的页面给用户,比直接显示异常好。

get_object_or_404一般需要3个参数:
1. modelname:一个model,manage,或query对象。
2. *args
3. **kwargs 而后面的*args,**kwargs则是查询的时候用到的参数。

下面用个例子看来下:
from django.shortcuts import get_object_or_404
product = get_object_or_404(Product, pk=1)

Product是要查询的model,后面的pk=1是查询条件,你可以根据你需要查询的情况来写条件。 上面的例子也可以写成下面这样的形式:

from django.http import Http404

try :
    product = Product . objects . get (pk = 1 )
except MyModel . DoesNotExist :
    raise Http404

看来用django get_object_or_404方法可以省下你很多操作。

 

 

 

 

 

分享到:
评论

相关推荐

    Python-djangoguardianDjango12实现了单个对象权限

    `django-guardian`提供了`@permission_required`和`@permission_required_or_403`装饰器,以及`get_object_or_404`和`get_list_or_404`的扩展版本,它们接受额外的`obj`参数来指定要检查权限的对象。 ```python ...

    Python3.6.4+Django2.0.2 单表的增删改查和表单验证(亲试可用).zip

    对于删(Delete),可以使用`get_object_or_404`来获取特定ID的对象,然后调用`delete()`方法: ```python from django.shortcuts import get_object_or_404 def delete_user(request, user_id): user = get_...

    BlogApplicationCRUD-master.zip

    from django.shortcuts import render, get_object_or_404, redirect from .models import BlogPost from .forms import BlogPostForm def blog_list(request): posts = BlogPost.objects.all().order_by('-pub_...

    十五、Django之编辑员工和删除员工

    from django.shortcuts import render, get_object_or_404, redirect from .forms import EmployeeForm from .models import Employee def edit_employee(request, pk): employee = get_object_or_404(Employee, ...

    Django_project.zip

    from django.shortcuts import render, get_object_or_404 from .models import Question def detail(request, question_id): question = get_object_or_404(Question, pk=question_id) return render(request...

    Python-基于PythonDjango的个人blog网站

    from django.shortcuts import render, get_object_or_404, redirect from .models import Post from .forms import PostForm def post_list(request): posts = Post.objects.order_by('-pub_date') return ...

    Python Django实现简单购物车功能

    product = get_object_or_404(Product, pk=product_id) session = request.session cart = session.get('cart', {}) if product_id in cart: cart[product_id] += 1 else: cart[product_id] = 1 session['...

    十六、Django之靓号管理(表结构和数据+查看+添加)

    from django.shortcuts import render, get_object_or_404 from .models import NiceNumber def list_numbers(request): numbers = NiceNumber.objects.all() return render(request, 'nicenum/numbers_list....

    django文档2.0和2.1.7z

    - 引入了`get_object_or_404()`和`get_list_or_404()`的类方法,方便在类视图中使用。 - `ModelForm`的`save()`方法现在默认为`commit=True`,提高一致性。 2. Django 2.1 版本: Django 2.1是对2.0的进一步完善...

    【Django入门】-Django实现blog系统的附件

    from django.shortcuts import render, get_object_or_404 from .models import Post, Attachment def post_detail(request, post_id): post = get_object_or_404(Post, pk=post_id) attachments = Attachment....

    基于Django2.0.6的简易博客搭建

    from django.shortcuts import render, get_object_or_404 from .models import Post, Comment def post_list(request): posts = Post.objects.order_by('-pub_date') return render(request, 'blog/post_list....

    django入门-增删改实例

    form = UserProfileForm(request.POST, instance=get_object_or_404(UserProfile, pk=user_id)) if form.is_valid(): form.save() return redirect('success_url') # 成功后跳转的URL else: form = ...

    Django富文本实测

    from django.shortcuts import render, get_object_or_404, redirect from .models import Article from .forms import ArticleForm def article_create(request): if request.method == 'POST': form = ...

    django-2.0

    8. **其他小改进**:还有许多其他的小改进,如`get_object_or_404`和`get_list_or_404`函数现在支持`QuerySet`的`select_related`和`prefetch_related`方法,这能提高数据检索的效率。 在安装Django 2.0时,确保你...

    PyPI 官网下载 | django_sieve-1.0.0.tar.gz

    from django.shortcuts import get_object_or_404 from django_sieve.filters import SieveFilterSet class MyModel(models.Model): name = models.CharField(max_length=255) age = models.IntegerField() def ...

    Django2 文件上传及下载功能(支持中文名文件)python3.7

    from django.shortcuts import render, redirect, get_object_or_404 from .models import FileModel from .forms import UploadFileForm def upload_file(request): if request.method == 'POST': form = ...

    django-polls案例

    question = get_object_or_404(Question, pk=question_id) return render(request, 'polls/detail.html', {'question': question}) def vote(request, question_id): # 处理投票逻辑... return redirect('polls...

    使用Django来开发一个简单的博客网站,如何实现?,需要的拿走

    from django.shortcuts import render, get_object_or_404 from .models import Post def index(request): posts = Post.objects.all() return render(request, 'blog/index.html', {'posts': posts}) def post_...

    基于C语言 跨平台json解析.zip

    对于数组和嵌套对象,`json_object_array_length()`和`json_object_object_get_entry()`等函数可以帮助我们遍历和访问。例如,遍历一个JSON数组并打印其元素: ```c json_object *jarray = json_object_object_get...

    Python库 | django-annoying-0.7.1.tar.gz

    2. **get_object_or_404()**: 这个函数是一个快捷方式,用于在模板中获取对象,如果对象不存在,它将触发404错误页面。这减少了代码中的重复性,并且提高了代码的可读性。 3. **render_to()**: 这个装饰器允许你...

Global site tag (gtag.js) - Google Analytics