【发布时间】:2014-05-23 21:00:40
【问题描述】:
我正在尝试使用 OAuth 开发 REST 提供程序。我正在使用 Django RESTFramework 和 DjangoOAuthToolkit。我做了一个 GET 并且它工作得很好但是我正在尝试使用一个 POST 并且服务器以 {"detail": "Method 'POST' not allowed."} 响应 这是我的代码:
# 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',
),
}
我将其用作“测试”客户端:
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 Framework 文档中关于 405 Method not allowed 的说法
“当出现未映射到视图上的处理程序方法的传入请求时引发。”
谢谢
【问题讨论】:
-
基本上,该错误意味着您不允许在特定视图上调用特定的 HTTP 方法,或者更常见的是您调用了错误的 url。检查你是否打电话给正确的人。你也可以在这里提供你的 urls 配置。
-
问题解决了,我错过了网址上的一个斜线。非常nooby的问题。谢谢!
-
在我的情况下,端点甚至不可用。我忘了把它添加到 urls.py 中。非常混乱。
标签: django post oauth django-rest-framework http-status-code-405