Django Rest Framework: 'function' object has no attribute 'as_view'

后端 未结 5 1074
佛祖请我去吃肉
佛祖请我去吃肉 2020-12-30 01:34

I\'ve been trying for a while to get a ModelResource or a View working using the Django Rest Framework. I\'m following the examples but the code in the examples is not worki

相关标签:
5条回答
  • 2020-12-30 01:42

    To add to Tim Saylor point,

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

    To decorate every instance of a class-based view, you need to decorate the class definition itself. To do this you apply the decorator to the dispatch() method of the class.

    A method on a class isn’t quite the same as a standalone function, so you can’t just apply a function decorator to the method – you need to transform it into a method decorator first. The method_decorator decorator transforms a function decorator into a method decorator so that it can be used on an instance method. For example:

    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)
    
    0 讨论(0)
  • 2020-12-30 01:50

    def TestView(View): should be class TestView(View):. As it stands, you define a function called TestView which takes an argument called View -- its body defines an inner function, then returns None.

    0 讨论(0)
  • 2020-12-30 01:51

    Since this is the #1 hit on google for this error message and there's a more subtle and probably common cause for it than the OPs, I'm posting this comment here.

    This error can also be caused by using a standard view decorator on a class based view instead of on the __dispatch__ method within the view.

    0 讨论(0)
  • 2020-12-30 01:55

    use this if you use a class your decorator should be import first:

    from django.utils.decorators import method_decorator
    

    then

    @method_decorator(login_required(login_url='login'),name="dispatch")
    class YourClassView(YourView):
    
    0 讨论(0)
  • 2020-12-30 02:04

    I am also getting this error but in my case i solved it with following idea.

    That error usually happens if you try to override a class. That sometimes happens if you copy&paste code and forget to change e.g. the class name. But in my case it was little different

    If you apply @login_required to a class, you will receive the error message:

    ‘function’ object has no attribute ‘as_view’

    So, how should you decorate classes in Django now? For class-based views, you have two options of decorating your classes.

    1) Decorating the URLconf

    2) Decorating the class

    Both options leads to the same result - restricting the access to a class only for logged users. The difference between the options is how the decorator is applied to the class instance.Refer this page for decorators implementation

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

    0 讨论(0)
提交回复
热议问题