不允许使用405 POST方法 [英] 405 POST method not allowed

查看:387
本文介绍了不允许使用405 POST方法的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用OAuth开发REST提供程序.我正在使用Django RESTFramework和DjangoOAuthToolkit.我做了一个GET,它工作正常,但是我尝试使用POST,并且服务器以{"detail":不允许使用方法'POST'."}进行响应 这是我的代码:

I'm trying to develop a REST provider with OAuth. I'm using Django RESTFramework and DjangoOAuthToolkit. I did a GET and it works perfectly but I'm trying to use a POST and the server responds with {"detail": "Method 'POST' not allowed."} This is my 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',
    ),
}

我将其用作测试"客户端:

And I'm using this as a "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

我不明白REST框架文档对禁止使用405方法的看法

I don't understand what REST Framework documentation says about 405 Method not allowed

在发生未映射到视图上的处理程序方法的传入请求时引发."

"Raised when an incoming request occurs that does not map to a handler method on the view."

谢谢

推荐答案

user2663554 <

问题解决了,我在网址上错过了一个斜杠.

Problem solved, I miss one slash on the url.

此响应代码(405)可能来自许多问题,但通常最终结果是您使用的URL错误(在这种情况下)或请求方法错误.有时两者都有!

This response code (405) can come from any number of issues, but it generally ends up that either you are using the wrong URL (as in this case), or you are using the wrong request method. Sometimes it's both!

我经常看到人们在尝试更新单个资源(/api/res/1)时遇到此问题,但是他们使用的列表URL(/api/res)不允许发出请求.相反,也可能发生这种情况,即有人试图创建新实例,但他们正在向单个对象发送POST请求.

Quite often I see people getting this issue when they are trying to update an individual resource (/api/res/1), but they are using the list url (/api/res) which doesn't allow the request to be made. This can also happen in the reverse, where someone is trying to create a new instance, but they are sending a POST request to the individual object.

在某些情况下,使用了错误的URL,因此用户正在请求标准的非API视图,并认为它是API视图(/res而不是/api/res).因此,请确保始终检查您的网址!

In some cases, the wrong url is being used, so users are requesting a standard non-API view and thinking it is an API view (/res instead of /api/res). So make sure to always check your urls!

这篇关于不允许使用405 POST方法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆