"detail": "方法 \\"GET\\" 不允许。" Django 休息框架

新手上路,请多包涵

我知道这个问题可能是重复的,但我尝试了很多解决方案,但无法理解任何一个。我完全按照本教程进行操作,但我在“用户列表”页面上收到此错误。其他一切都很好。有人可以指出错误是什么吗?

 class UserList(APIView):
"""
Create a new user. It's called 'UserList' because normally we'd have a get
method here too, for retrieving a list of all User objects.
"""

permission_classes = (permissions.AllowAny,)
http_method_names = ['get', 'head']

def post (self, request, format=None):
    self.http_method_names.append("GET")

    serializer = UserSerializerWithToken(data=request.data)
    if serializer.is_valid():
        serializer.save()
        return Response(serializer.data, status=status.HTTP_201_CREATED)
    return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

编辑:urls.py

 from django.urls import include, path
from classroom.views.classroom import current_user, UserList
from .views import classroom, suppliers, teachers
urlpatterns = [path('', classroom.home, name='home'),
               path('current_user/', current_user),
               path('users/', UserList.as_view()),

编辑:

仍然收到此错误,

呃

原文由 Rohit Kumar 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 820
2 个回答

您需要将 GET 端点 url 添加到您的 urls.py 才能使用 GET 请求。 GET url 在你的 urls.py 中丢失,只需编辑你的 urls.py 就像:

 # urls.py

from django.urls import include, path
from classroom.views.classroom import current_user, UserList
from .views import classroom, suppliers, teachers

urlpatterns = [
               path('', classroom.home, name='home'),
               path('current_user/', current_user),
               path('users/', UserList.as_view()),
               path('users/<int:pk>/', UserList.as_view()),
              ]

并且您需要在您的 UserList 视图中实施 get 方法,例如:

 # views.py

class UserList(APIView):
    """
    Create a new user. It's called 'UserList' because normally we'd have a get
    method here too, for retrieving a list of all User objects.
    """

    permission_classes = (permissions.AllowAny,)
    http_method_names = ['get', 'head']

    def get(self, request, format=None):
        users = User.objects.all()
        serializer = UserSerializerWithToken(users, many=True)
        return Response(serializer.data)

    def post(self, request, format=None):
        self.http_method_names.append("GET")

        serializer = UserSerializerWithToken(data=request.data)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data, status=status.HTTP_201_CREATED)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

原文由 cagrias 发布,翻译遵循 CC BY-SA 4.0 许可协议

我有同样的问题,但我注意到在我的 views.py 中,我有

renderer_class = api_settings.DEFAULT_RENDERER_CLASSES

我将其更正为:

 renderer_classes = api_settings.DEFAULT_RENDERER_CLASSES

它对我有用。

原文由 Sanju Gautam 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题