405 méthode POST pas permis
Je suis en train de développer un REPOS fournisseur avec OAuth. Je suis l'aide de Django RESTFramework et DjangoOAuthToolkit. J'ai fait un GET et il fonctionne parfaitement mais je suis en train d'utiliser un POSTE et le serveur répond avec {"detail": "Méthode" POST "pas autorisé".}
C'est mon code:
# views.py
@api_view(['POST'])
def pruebapost(request):
usuario = User()
access_token = Token.objects.get(
key=request.POST['oauth_token']
)
usuario = access_token.user
content = {'saludo': usuario.username}
return Response(content)
# settings.py
OAUTH_AUTHORIZE_VIEW = 'principal.views.oauth_authorize'
SESSION_SERIALIZER = 'django.contrib.sessions.serializers.JSONSerializer'
REST_FRAMEWORK = {
'DEFAULT_RENDERER_CLASSES': (
'rest_framework.renderers.JSONRenderer',
),
'DEFAULT_PARSER_CLASSES': (
'rest_framework.parsers.JSONParser',
),
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework.authentication.OAuthAuthentication',
),
}
Et je suis à l'utilisation de ce comme un "test" client:
import urlparse
import oauth2 as oauth
import requests
consumer_key = "clave"
consumer_secret = "secreto"
consumer = oauth.Consumer(consumer_key, consumer_secret)
client = oauth.Client(consumer)
resource_url = 'http://blablabla.pythonanywhere.com/prueba'
consumer = oauth.Consumer(key='clave', secret='secreto')
token = oauth.Token(key='e7456187a43141af8d2e0d8fa99b95b9',
secret='3wRIKoacff16tcew')
oauth_request = oauth.Request.from_consumer_and_token(
consumer,
token,
http_method='POST',
http_url=resource_url,
parameters={'hola':'pepe'}
)
oauth_request.sign_request(
oauth.SignatureMethod_HMAC_SHA1(),
consumer,
token
)
url = oauth_request.to_url()
response = requests.post(url, oauth_request.to_postdata())
print response.content
Je ne comprends pas ce REPOS Cadre de la documentation dit à propos de 405 method not allowed
"Soulevées lors de la réception d'une demande se produit qui ne correspond pas à une méthode de gestionnaire de la vue."
Grâce
- Fondamentalement, cette erreur signifie que vous n'avez pas le droit spécifique de la méthode HTTP à être appelé sur un point de vue spécifique, ou, plus souvent que vous êtes à l'appel d'une url erronée. Vérifier si vous appelez le bon. Vous pouvez également fournir votre url config ici.
- Problème résolu, je manque un slash sur l'url. Très nooby question. Merci!
- double possible de Django/DRF - 405 method not allowed sur l'opération de SUPPRESSION
- Dans mon cas, le point de terminaison n'était même pas disponible. J'ai oublié de l'ajouter à la urls.py. Très déroutant.
Vous devez vous connecter pour publier un commentaire.
Cela a été résolu dans les commentaires par user2663554
Ce code de réponse (405) peut provenir d'un certain nombre de questions, mais il finit généralement par se que vous utilisez l'URL erronée (comme dans ce cas), ou que vous utilisez le mauvais type de méthode. Parfois c'est les deux!
Assez souvent, je vois des gens arriver ce problème lorsqu'ils essaient de mettre à jour une ressource individuelle (
/api/res/1
), mais ils sont à l'aide de la liste d'url (/api/res
) qui n'autorise pas la demande est faite. Cela peut également se faire à l'inverse, lorsque quelqu'un est en train de créer une nouvelle instance, mais ils sont l'envoi d'unPOST
demande à l'objet individuel.Dans certains cas, l'url incorrect est utilisé, de sorte que les utilisateurs sont demandeurs d'une norme de non-API vue et la pensée qu'il est une API de vue (
/res
au lieu de/api/res
). Donc, assurez-vous de toujours vérifier votre url!Dans mon cas, j'ai eu un routeur avec la même url de base
et mon url patterns
Je recevais une erreur 405 pour
sales/analytics/
. La solution a été de changer l'ordre de urlpatterns.au lieu de cela, s'il vous plaît "importer à partir d'rest_framework importer des génériques" et de le modifier pour
il y a beaucoup de points de vue dans le générique listcreateAPIview est utilisé pour get et post et createapiview est utilisé uniquement pour les méthodes post