python - 尝试检索单个资源时,DRF ViewSet 中不允许使用方法 GET

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

我是 Python 和 Django 新手。我创建了 ViewSet,如下所示:

api/views.py

class UserDetails(ViewSet):
"""
CREATE, SELECT, UPDATE OR DELETE
"""

def retrive(self, request, pk):
    user = self.get_object(pk)
    print(user.query)
    user = TestSerializer(user)
    return Response(user.data)

def list(self, request):
    users = TestTB.objects.all()
    print(users.query)
    serializer = TestSerializer(users, many=True)
    return Response(serializer.data)

def create(self, request):
    serializer = TestSerializer(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)

def update(self, request, pk):
    user = self.get_object(pk)
    serializer = TestSerializer(user, data=request.data)
    if serializer.is_valid():
        serializer.save()
        return Response(serializer.data)
    return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

def destroy(self, request, pk):
    user = self.get_object(pk)
    user.delete()
    return Response(status=status.HTTP_204_NO_CONTENT)

def get_object(self, pk):
    try:
        return TestTB.objects.get(pk=pk)
    except TestTB.DoesNotExist:
        raise Http404

api/urls.py

router = routers.DefaultRouter()
router.register(r'users', UserDetails, base_name='user-details')

urlpatterns = router.urls

这适用于创建新资源的 POST 请求、获取所有资源的 GET 请求、更新资源的 PUT 请求和删除资源的 DELETE 请求。但如何检索单个资源呢?当我发出像 http://127.0.0.1:8000/api/users/1/ 这样的请求时,它会显示错误 -

{ "detail": "Method \"GET\" not allowed." }

这意味着 UserDetails 中的retrieve()方法永远不会被调用。我知道我错过了一些东西,但无法弄清楚是什么。

最佳答案

检索更改为检索。按照 @Linovia 的建议,根据评论做出了答案。

关于python - 尝试检索单个资源时,DRF ViewSet 中不允许使用方法 GET,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46170291/

相关文章:

python - 使用正确的返回值修补相同的对象

django - 'TreeQuerySet' 对象没有属性 'name'

python - 导入 django_filters.rest_framework 错误

jquery - 获取 Django 中 HTML 表单中多个按钮之一的 ID

python - 我应该什么时候提交 Django 表单的结果?

django - 如何使用 Django REST Framework 在 Django 中将输入作为字符串并保存为二进制?

python - 从单一 View 到不同端点的方法 : keep APIs for HTML and for JSON separated (Django Rest Framework)

python - 为什么 2**100 比 math.pow(2,100) 快这么多?

python - 使用 chrome POSTMAN 测试 http POST 时,它在 django 中不起作用

python - 无法从 MySQL 获取数据并在 Django 中呈现它