tutorial register get_object_or_404 framework create based as_view django django-rest-framework

register - Django Rest Framework: el objeto ''function'' no tiene ningún atributo ''as_view''



get_object_or_404 django rest framework (4)

Dado que este es el hit # 1 en google para este mensaje de error y hay una causa más sutil y probablemente común para él que los OP, estoy publicando este comentario aquí.

Este error también puede deberse al uso de un decorador de vista estándar en una vista de clase en lugar de __dispatch__ método __dispatch__ dentro de la vista.

He intentado por un tiempo hacer funcionar un ModelResource o una View usando el Django Rest Framework. Estoy siguiendo los ejemplos pero el código en los ejemplos no funciona para mí. ¿Alguien puede decirme por qué podría estar recibiendo este error?

views.py

# Create your views here. from django.http import HttpResponse from django.utils import simplejson from django.core import serializers from djangorestframework.views import View from djangorestframework.response import Response from djangorestframework import status from interface.models import * def TestView(View): def get(self, request): return Person.objects.all()

urls.py

from django.conf.urls.defaults import * from djangorestframework.resources import ModelResource from djangorestframework.views import ListOrCreateModelView, InstanceModelView, View from interface.models import * from interface.views import * class PersonResource(ModelResource): model = Person ordering = (''LastName'') urlpatterns = patterns('''', url(r''^$'', ''interface.views.index''), url(r''^testview/$'', TestView.as_view()), url(r''^people/$'', ListOrCreateModelView.as_view(resource=PersonResource)), )

Ahora obtengo el error ''objeto de función'' no tiene el atributo ''as_view''.


Para agregar al punto de Tim Saylor,

https://docs.djangoproject.com/en/dev/topics/class-based-views/intro/#id1

Para decorar cada instancia de una vista basada en clases, necesita decorar la definición de la clase en sí. Para hacer esto, aplica el decorador al método dispatch () de la clase.

Un método en una clase no es lo mismo que una función independiente, por lo que no puede aplicar un decorador de funciones al método; primero debe transformarlo en un decorador de métodos. El decorador method_decorator transforma un decorador de funciones en un decorador de métodos para que pueda usarse en un método de instancia. Por ejemplo:

from django.contrib.auth.decorators import login_required from django.utils.decorators import method_decorator from django.views.generic import TemplateView class ProtectedView(TemplateView): template_name = ''secret.html'' @method_decorator(login_required) def dispatch(self, *args, **kwargs): return super(ProtectedView, self).dispatch(*args, **kwargs)


También recibo este error, pero en mi caso lo resolví con la siguiente idea.

Ese error suele ocurrir si intenta anular una clase. Eso sucede a veces si copias y pega el código y te olvidas de cambiar, por ejemplo, el nombre de la clase. Pero en mi caso fue un poco diferente

Si aplica @login_required a una clase, recibirá el mensaje de error:

''function'' object has no attribute ''as_view''

Entonces, ¿cómo se deben decorar las clases en Django ahora? Para las vistas basadas en clases, tiene dos opciones para decorar sus clases.

1) Decorar el URLconf

2) Decorar la clase

Ambas opciones conducen al mismo resultado: restringir el acceso a una clase solo para usuarios registrados. La diferencia entre las opciones es cómo se aplica el decorador a la instancia de la clase. Consulte esta página para la implementación de decoradores.

https://docs.djangoproject.com/en/1.4/topics/class-based-views/#decorating-class-based-views


def TestView(View): debería ser class TestView(View): Tal como está, usted define una función llamada TestView que toma un argumento llamado View - su cuerpo define una función interna, luego devuelve None .