我的代码中有一个用户视图集。
我想要的是仅允许读取操作 (/users/42和/users/),而ReadOnlyModelViewSet可以很好地实现这一点。
此外,我想要一个/users/register的URL,以便可以通过POST注册新用户。
class UserViewSet(viewsets.ReadOnlyModelViewSet):
queryset = User.objects.all()
serializer_class = UserSerializer
@list_route(methods=['post'])
def register(request):
serializer = UserSerializer(data=request.DATA)
if serializer.is_valid():
user = User.objects.create_user(
username = serializer.init_data['username'],
password = serializer.init_data['password'],
)
return Response(serializer.data, status=status.HTTP_201_CREATED)
else:
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
几个问题:
这样做是否正确?
如果我把方法放在 list_route 或 detail_route 装饰器中,该方法是否需要特定的签名(signature)?因为在 detail_route 的例子中,该方法的签名总是相同的:method_name(self, request, pk=None):
谢谢!