Python Django在URL中为视图调用函数

Python Django在URL中为视图调用函数,python,django,Python,Django,我对在URL中使用视图的这两种不同语法感到困惑。对于一般视图,我们使用 views.myview.as_view() 但是如果我需要使用自己的自定义函数来查看,那么我需要使用 views.myview().myfunction 为什么两者之间有区别 为什么不views.myview.myfunction正在工作as\u view()类方法创建一个视图函数,该视图函数将创建视图类的新实例,然后将控制权传递给它的分派方法。因此,您将有一个不同的视图实例,用于为每个请求提供服务 在第二个示例中,只

我对在URL中使用视图的这两种不同语法感到困惑。对于一般视图,我们使用

views.myview.as_view()
但是如果我需要使用自己的自定义函数来查看,那么我需要使用

views.myview().myfunction
为什么两者之间有区别

为什么不
views.myview.myfunction
正在工作as\u view()类方法创建一个视图函数,该视图函数将创建
视图
类的新实例,然后将控制权传递给它的
分派
方法。因此,您将有一个不同的视图实例,用于为每个请求提供服务

在第二个示例中,只创建视图的一个实例,并使用绑定方法作为视图函数。这意味着使用同一个实例为每个请求提供服务(这也意味着它可以由两个请求同时使用。这种共享状态对于不读取您的urlconf的人来说并不明显,因此可能会导致错误

如果您只需要分派一个不同的方法,考虑重写<代码>调度< /COD>。您可以将关键字参数传递给<代码> ASYVIEW ,如果在不同地方的视图需要不同的行为,那么它将可以作为<代码>调度> /代码>中的实例属性。


如果您需要在不同请求之间共享某种状态,请考虑在视图类的共享实例上使用比属性更明确的属性。

视图可以写成类或函数。如果您不担心重新使用代码,那么函数可能更容易。查看一下。然后可以快速查看一下。最后,检查文档中是否有

视图函数是这样编写的-

def my_view(request, *args, **kwargs):
    ...
    return HttpResponse()
通过将函数传递到urlpatterns中来调用视图函数,如下所示-

from django.conf.urls import patterns
from views import my_view

urlpatterns = patterns('',
    (r'^my_page/$', my_view)
)
基于类的视图允许通过继承重用功能

from django.views.generic import DetailView

class MySpecialDetailView(DetailView):
    ...
    # add functionality here
问题是url安装程序需要的是函数,而不是类。这就是
as\u view()
函数的作用。基于类的视图在url配置中被称为as-

from django.conf.urls import patterns
from views import MySpecialDetailView

urlpatterns = patterns('',
    (r'^my_special_page/$', MySpecialDetailView.as_view())
)

抱歉,如果我误解了您的问题

我有两个问题。1.
在什么情况下/用例下,我们需要在不同的请求中设置一些状态
,以及
如何正确执行
。2.
我如何过度使用调度功能。任何示例tut
(1)您可能希望在请求之间缓存内容,甚至尝试永久存储内容。Django对这两种方式都有更好的选择你想让这个方法具体做什么?你没有解释为什么你需要将你的方法命名为
myfunction
,而不是
dispatch
get
或其他什么。我唯一需要知道的是,如果你需要调用
而不是as\u view()函数
函数,然后synatx将更改为
MySpecialDetailView()。as_view\u custom
。我只想知道为什么不调用as_view\u custom()。在新的基于类的视图中重写as_view(),并调用它。为什么需要调用as_view\u custom()?我知道我可以这么做。但我只想知道为什么不同