Django REST Framework - 405 MÉTHODE NON AUTORISÉE avec SimpleRouter
Je suis en utilisant le SimpleRouter tuorial dans les docs.
Juste pour tester, j'ai créé une Authentification temporaire de la classe:
class BackboneBasicAuthentication(authentication.BaseAuthentication):
def authenticate(self, request):
user = User.objects.filter(username="james")
return (user, None)
paramètres de ressembler à ce
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': (
'core.rest_authentication.BackboneBasicAuthentication',
),
'DEFAULT_PERMISSION_CLASSES': (
'rest_framework.permissions.AllowAny',
),
}
Soumettre une requête retourne une 405 method not ALLOWED
{"detail": "Method 'PUT' not allowed."}
J'ai essayé avec X-HTTP-Méthode-Override. Sans aller.
Les idées de ce que je fais mal?
J'ai passé une journée entière à essayer de comprendre cela, j'espère que quelqu'un pourra vous aider! 🙂
source d'informationauteur RadiantHex
Vous devez vous connecter pour publier un commentaire.
Pour moi qui semble être causée par la routé viewset ne pas mettre en œuvre ou non permettant de METTRE les demandes. Si c'était un problème d'authentification, vous obtiendrez un
401 UNAUTHORIZED
code d'état.La simple routeur ajoute le mettre attribut de la vue pour obtenir une url correspondant au modèle que vous fournissez avec le pk ajoutée comme élément du motif.
Par exemple, si vous avez utilisé:
Le cadre de la création de deux modèles url:
Je devine que vous êtes seulement en essayant url satisfaire le premier match pour lequel le viewset instance aura seulement 'get' ('liste') et 'post' ('create') prise en charge par le framework, donc il sera la cause de l'erreur que vous voyez si vous essayez de mettre/patch ou de les supprimer. Pour ces méthodes de travail que vous devez fournir à la pk de sorte que le cadre qui sait widget vous êtes en modifiant ou en supprimant et que votre url correspondant à la vue qui prend en charge ces méthodes.
Ceci est source de confusion et vous pouvez choisir de ne pas utiliser le simple_router à tous, si vous trouvez qu'il est trop confus. Ensuite, vous pouvez spécifier votre propre méthode de cartographie de sorte que le rest_framework enverra à votre placer des méthodes par exemple