【问题标题】:I'm getting 'module' object is not callable in Django Rest Framework我得到“模块”对象在 Django Rest Framework 中不可调用
【发布时间】:2020-12-31 00:58:34
【问题描述】:

我正在尝试为 api 学习 django rest 框架。我正在关注文档并检查了所有导入,但我收到了 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))
]

错误

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

这是 DjangoRestFramework 的 settings.py

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'
    ]
}

【问题讨论】:

  • 请显示完整的错误。
  • @isAif 我附上了完整的错误。请帮助我:-)
  • 显示您在设置中配置的身份验证器。有些东西指向一个模块而不是那里的一个类。

标签: python django django-rest-framework django-serializer django-rest-viewsets


【解决方案1】:

您的设置配置错误。 The manual says:

令牌认证

..

要使用TokenAuthentication 方案,您需要将身份验证类配置为包含TokenAuthentication,并在您的INSTALLED_APPS 设置中另外包含rest_framework.authtoken

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

rest_framework.authtoken 将被放入 INSTALLED_APPS,而不是 DEFAULT_AUTHENTICATION_CLASSES。不过,我不完全确定将文档暗示的内容放入DEFAULT_AUTHENTICATION_CLASSES;最有可能:

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

【讨论】:

  • 非常感谢,终于成功了!非常感谢你:)
猜你喜欢
  • 2016-06-30
  • 1970-01-01
  • 2013-08-06
  • 2019-09-30
  • 2016-11-23
  • 2017-02-16
  • 2016-02-04
  • 1970-01-01
相关资源
最近更新 更多