我得到“模块”对象在 Django Rest Framework 中不可调用

问题描述

我正在尝试为 api 学习 django rest 框架。我正在关注文档并检查了所有导入,但出现类型错误:'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,line 146,in initialize_request
    request = super().initialize_request(request,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",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'
    ]
}

解决方法

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

令牌认证

...

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

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...