Hi James,
The 405 response is because the view doesn't have a 'put' method.
What do the views you're testing look like?
I'd keep thing simple, and drop the authentication class while you're testing - do you still get the same response?
One other obvious thing to note, you mention this line...
user = User.objects.filter(username="james")
which should probably be...
user = User.objects.get(username="james")
As right now it looks like you're returning a queryset rather than a user instance from your authentication class.
Regards,
Tom