简体   繁体   中英

I'm getting 'module' object is not callable in Django Rest Framework

I'm trying to learn django rest framework for an api. I'm following the documentation and checked all the imports but I'm getting the typeerror: 'module' object is not callable

Views.py

from rest_framework import viewsets
from .serializer import CategorySerializer
from .models import CategoryModel

class FirstView(viewsets.ModelViewSet):
    queryset = CategoryModel.objects.all().order_by('name')
    serializer_class = CategorySerializer

serializers.py

from rest_framework import serializers

from .models import CategoryModel

class CategorySerializer(serializers.ModelSerializer):
    class Meta:
        model = CategoryModel
        field = ['name', 'description']

urls.py

from django.urls import path, include

from rest_framework.routers import DefaultRouter
from . import views

router = DefaultRouter()

router.register(r'', views.FirstView)

urlpatterns = [
    path('', include(router.urls))
]

Error

Internal Server Error: /api/category/
Traceback (most recent call last):
  File "C:\Users\aashu\.virtualenvs\lcodev-xFWoZVV6\lib\site-packages\django\core\handlers\exception.py", line 34, in inner
    response = get_response(request)
  File "C:\Users\aashu\.virtualenvs\lcodev-xFWoZVV6\lib\site-packages\django\core\handlers\base.py", line 115, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "C:\Users\aashu\.virtualenvs\lcodev-xFWoZVV6\lib\site-packages\django\core\handlers\base.py", line 113, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "C:\Users\aashu\.virtualenvs\lcodev-xFWoZVV6\lib\site-packages\django\views\decorators\csrf.py", line 54, in wrapped_view
    return view_func(*args, **kwargs)
  File "C:\Users\aashu\.virtualenvs\lcodev-xFWoZVV6\lib\site-packages\rest_framework\viewsets.py", line 125, in view
    return self.dispatch(request, *args, **kwargs)
  File "C:\Users\aashu\.virtualenvs\lcodev-xFWoZVV6\lib\site-packages\rest_framework\views.py", line 492, in dispatch
    request = self.initialize_request(request, *args, **kwargs)
  File "C:\Users\aashu\.virtualenvs\lcodev-xFWoZVV6\lib\site-packages\rest_framework\viewsets.py", line 146, in initialize_request
    request = super().initialize_request(request, *args, **kwargs)
  File "C:\Users\aashu\.virtualenvs\lcodev-xFWoZVV6\lib\site-packages\rest_framework\views.py", line 394, in initialize_request
    authenticators=self.get_authenticators(),
  File "C:\Users\aashu\.virtualenvs\lcodev-xFWoZVV6\lib\site-packages\rest_framework\views.py", line 272, in get_authenticators
    return [auth() for auth in self.authentication_classes]
  File "C:\Users\aashu\.virtualenvs\lcodev-xFWoZVV6\lib\site-packages\rest_framework\views.py", line 272, in <listcomp>
    return [auth() for auth in self.authentication_classes]
TypeError: 'module' object is not callable

This is the settings.py which is for DjangoRestFramework

settings.py

REST_FRAMEWORK = {
     'DEFAULT_AUTHENTICATION_CLASSES': [
        'rest_framework.authentication.BasicAuthentication',
        'rest_framework.authentication.SessionAuthentication',
        'rest_framework.authtoken',
    ],
    'DEFAULT_PERMISSION_CLASSES': [
        'rest_framework.permissions.DjangoModelPermissionsOrAnonReadOnly'
    ]
}

Your settings are misconfigured. The manual says :

TokenAuthentication

..

To use the TokenAuthentication scheme you'll need to configure the authentication classes to include TokenAuthentication , and additionally include rest_framework.authtoken in your INSTALLED_APPS setting:

 INSTALLED_APPS = [... 'rest_framework.authtoken' ]

The rest_framework.authtoken is to be put into INSTALLED_APPS , not DEFAULT_AUTHENTICATION_CLASSES . I'm not entirely sure what the documentation insinuates is to be put into DEFAULT_AUTHENTICATION_CLASSES though; most likely:

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': [
        ...,
        'rest_framework.authentication.TokenAuthentication'
    ],
    ...
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM