首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django CBV的构造方法

Django CBV的构造方法
EN

Stack Overflow用户
提问于 2020-06-30 19:14:20
回答 1查看 133关注 0票数 2

我是从纯粹的热情中学习Django的,我似乎很难理解Django的一些核心原则,这些原则确实让我头疼,我试着在网上搜索和阅读文档,但我似乎并不完全理解。我只想简单地回答问题,尽量说清楚。我为我说的任何蠢话道歉。我只是想把我的知识弄清楚。

1.什么是“请求”?

好的,所以我正在考虑对网页的GET请求,但是在网上我看到了类似于self.request.user.is_superuser的python代码,我想到的是一个获取并显示到模板中的用户对象,我可以将用户方法应用到模板中。显然,这一要求比我已经知道的要多。

2. CBV是在方法中构建的。得到的方法。他们是怎么执行的?按什么顺序.

我注意到程序员有时会覆盖这些方法。如果我在CBV中重新定义了多个方法,我就会开始产生奇怪的行为。

例如,如果我在一个详细视图中声明和重新定义了2个方法,那么在调用视图之后,将首先执行其中的get_object()get_queryset()?作为一个方法,应该以某种方式调用它来执行,但是如果有多个CBV,我不知道这些方法是如何被调用的。也许我应该只定义其中一个,而不是两者都定义。

3. Queryset.是单子吗?

我有一个ideea查询集,您可以将过滤器应用到它们,但是它们返回什么?他们会返回我正在查询的模型的对象吗?

那么,如果我有一个DetailView CBV并重写了get_queryset()方法,这个方法会返回对象并将它传递给我的模板吗?这里我使用的是过滤器,但如果没有使用过滤器呢?CBV会返回什么?它会返回整个对象集吗?

代码语言:javascript
复制
class UserDetailView(LoginRequiredMixin,DetailView):
    context_object_name='user_detail'
    model=models.User
    template_name='basicapp/user_detail.html' 
    def get_queryset(self, *args, **kwargs):
        qs = super().get_queryset(*args, **kwargs)
        if not self.request.user.is_superuser:
            qs = qs.filter(pk=self.request.user.pk)
        return qs

4.请您推荐一本可以清楚解释查询集、CBV方法和ORM的Udemy课程、视频课程或书籍吗?

最好是视频,因为当我看到代码起作用时,它会产生很大的影响。

问题是,我理解MVT机制是如何工作的,但是这些在方法中构建并重写它们的类给我带来了很多问题。我以前从未遇到过它们,当我开始使用它们时,我感觉就像在黑暗中行走一样。

很抱歉寄了这么长的邮筒。谢谢

EN

回答 1

Stack Overflow用户

发布于 2020-06-30 19:27:18

  1. 什么是request

这是一个对象[Django-doc]。这是一个包含客户端向服务器发出请求的数据的对象。例如,它包含一个属性[Django-doc],该属性包含一个字符串,如'GET''POST''PATCH'等,这些字符串指定使用的请求方法。

但是在网上,我看到了像self.request.user.is_superuser这样的python代码,我想到了一个User对象,它被取出并显示到模板中,我可以将用户方法应用到模板中。

可以安装[Django-doc],这是一种预处理请求的工具,也可以是后置处理响应的工具。通常,默认情况下,[Django-doc]将添加到settings.py文件中。这将向延迟加载已登录用户的请求添加一个额外的属性.user。如果要删除此中间件,则.user属性将不再存在。

  1. CBV是建立在方法上的。得到的方法。他们是怎么执行的?按什么顺序。

这取决于特定的基于类的视图。但是,文档指定了如何执行大多数方法。例如,对于[Django-doc],文档中提到了方法流程图

方法流程图

  1. setup()
  2. dispatch()
  3. http_method_not_allowed()
  4. get_template_names()
  5. get_queryset()
  6. get_context_object_name()
  7. get_context_data()
  8. get()
  9. render_to_response()

它还链接到解释这些方法的方法。

本质上,每个基于类的视图都可以有getpostputpatch等方法。根据请求的方法,请求被发送给同名的方法。

  1. 奎尔塞特。是单子吗?

No..QuerySet是一个或多或少表示可以在数据库上执行的查询的对象。QuerySets很懒。这意味着,只要您不对它们进行迭代,或者例如调用len(…),它们就不会进行查询。如果对这些内容进行迭代等,它们将对数据库进行查询,然后遍历查询的结果。结果通常被包装在模型对象中(除非使用像[Django-doc][Django-doc]这样的函数)。

  1. 请您推荐一个Udemy课程,视频课程或书,其中查询集,CBV方法和ORM有清楚的解释?

Django教程开始可能会有帮助。一步一步地超越Django的架构。关于QuerySet API的文档解释了如何生成查询集。页上给出了如何进行更高级查询的示例。最后,Django文档还有一个页面上的基于类的视图。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62664648

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档