Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django视图为_视图()_Django - Fatal编程技术网

Django视图为_视图()

Django视图为_视图(),django,Django,收到用户的请求时会发生什么情况? 该视图是从类视图返回的吗? 或者是否创建了类视图的实例?URL.py将调用传递到路径(…)的可调用对象。因此,.as_view()将返回调用的函数。您可以在以下位置找到此的源代码: 因此,它将返回它在as_view()方法中构造的视图函数。当“触发”视图时调用view()方法时,它将使用传递给as\u view()方法的可选**initkwargs构造一个view实例。因此,这意味着每个HTTP请求将构造一个新的视图对象 接下来,它将通过向实例添加请求、参数和k

收到用户的请求时会发生什么情况? 该视图是从类视图返回的吗?
或者是否创建了类视图的实例?

URL.py将调用传递到
路径(…)
的可调用对象。因此,
.as_view()
将返回调用的函数。您可以在以下位置找到此的源代码:

因此,它将返回它在
as_view()
方法中构造的
视图
函数。当“触发”视图时调用
view()
方法时,它将使用传递给
as\u view()方法的可选
**initkwargs
构造一个
view
实例。因此,这意味着每个HTTP请求将构造一个新的
视图
对象


接下来,它将通过向实例添加
请求
参数
kwargs
来“设置”obect。最后,它将调用
self.dispatch(..)
此方法将查看请求方法(GET、POST、PUT、PATCH、DELETE等),查看它是否是可接受方法的一部分,在这种情况下,将触发相应的
.GET(..)
.POST(..)
.PUT(..)
,…方法,然后返回该方法的结果。

是,
。as_view()
返回一个函数。因此它返回一个附加了一些属性的视图函数。@classonlymethod Djangos是否是类方法的自己的装饰器?@StreamlineAstra:是的,它是
@classmethod
的子类,如果您错误地使用它,它将引发异常(例如,在调用
self.as\u view()
时):对于**initkwargs?@StreamlineAstra,通常传递给as\u view()的是什么?@StreamlineAstra:例如,您可以传递
模板\u name
或未在基于类的视图本身中指定的其他类属性,例如,如果您想多次使用该视图,每次都会有一些小的更改。
Example views.py:
from django.http import HttpResponse
from django.views import View

class MyView(View):

    def get(self, request, *args, **kwargs):
        return HttpResponse('Hello, World!')

Example urls.py:
from django.urls import path
from myapp.views import MyView

urlpatterns = [
    path('mine/', MyView.as_view(), name='my-view'),
]



classmethod as_view(**initkwargs)¶
@classonlymethod
def as_view(cls, **initkwargs):
    """Main entry point for a request-response process."""
    for key in initkwargs:
        if key in cls.http_method_names:
            raise TypeError("You tried to pass in the %s method name as a "
                            "keyword argument to %s(). Don't do that."
                            % (key, cls.__name__))
        if not hasattr(cls, key):
            raise TypeError("%s() received an invalid keyword %r. as_view "
                            "only accepts arguments that are already "
                            "attributes of the class." % (cls.__name__, key))

    def view(request, *args, **kwargs):
        self = cls(**initkwargs)
        if hasattr(self, 'get') and not hasattr(self, 'head'):
            self.head = self.get
        self.setup(request, *args, **kwargs)
        if not hasattr(self, 'request'):
            raise AttributeError(
                "%s instance has no 'request' attribute. Did you override "
                "setup() and forget to call super()?" % cls.__name__
            )
        return self.dispatch(request, *args, **kwargs)
    view.view_class = cls
    view.view_initkwargs = initkwargs

    # take name and docstring from class
    update_wrapper(view, cls, updated=())

    # and possible attributes set by decorators
    # like csrf_exempt from dispatch
    update_wrapper(view, cls.dispatch, assigned=())
    return view