framework - method not allowed(post) django
405 POST método no permitido (1)
Esto fue resuelto en los comentarios del
Problema resuelto, echo de menos un corte en la url.
Este código de respuesta (405) puede provenir de cualquier cantidad de problemas, pero generalmente significa que está utilizando una URL incorrecta (como en este caso), o está utilizando el método de solicitud incorrecto. ¡A veces son las dos!
Muy a menudo veo que las personas obtienen este problema cuando intentan actualizar un recurso individual ( /api/res/1
), pero están usando la lista url ( /api/res
) que no permite que se realice la solicitud. Esto también puede ocurrir al revés, cuando alguien intenta crear una nueva instancia, pero están enviando una solicitud POST
al objeto individual.
En algunos casos, se está utilizando la URL incorrecta, por lo que los usuarios solicitan una vista estándar que no sea API y piensan que es una vista API ( /res
lugar de /api/res
). ¡Asegúrate de comprobar siempre tus URL!
Estoy intentando desarrollar un proveedor de REST con OAuth. Estoy usando Django RESTFramework y DjangoOAuthToolkit. Hice un GET y funciona perfectamente, pero estoy tratando de usar un POST y el servidor responde con {"detalle": "Método ''POST'' no permitido."} Este es mi código:
# 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'',
),
}
Y estoy usando esto como un cliente de "prueba":
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
No entiendo qué dice la documentación de REST Framework sobre 405 Método no permitido
"Se genera cuando se produce una solicitud entrante que no se asigna a un método de control en la vista".
Gracias