小编Ani*_*cha的帖子

405 POST方法不允许

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

# 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',
    ),
}
Run Code Online (Sandbox Code Playgroud)

我正在使用它作为"测试"客户端:

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', …
Run Code Online (Sandbox Code Playgroud)

django post oauth http-status-code-405 django-rest-framework

38
推荐指数
2
解决办法
7万
查看次数

Django Rest Framework,ajax POST工作但PATCH抛出CSRF失败:CSRF令牌丢失或不正确

我正在将我的项目移植到Django Rest Framework为我的项目制作一个合适的REST Api,我认为它有助于大量设计API并使其健壮但我遇到了一个问题:

我有一个入门模型和相关的ListCreateAPIViewRetrieveUpdateDestroyAPIView视图.我可以通过ajax请求在列表中成功发布一个新的条目实例,并csrfmiddlewaretoken按照我在常规Django View中的方式提供.

    POST entries/
Run Code Online (Sandbox Code Playgroud)

现在我尝试使用相同的方法将补丁应用于现有实例csrfmiddlewaretoken:

    PATCH entries/3
Run Code Online (Sandbox Code Playgroud)

然后响应状态代码是403 FORBIDDEN错误的,CSRF Failed: CSRF token missing or incorrect尽管我检查csrfmiddlewaretoken了请求数据中的firebux .

我没有错,我无法找到代码中的哪个地方被拒绝了.

注意:我可以使用Django Rest Framework可浏览的api 修补对象.

我希望有人能帮帮忙.谢谢.奥利维尔

编辑

我正在深入研究代码,看看PATCH请求的拒绝发生在哪里,我发现django.middleware.csrt.py如下:

        if csrf_token is None: #<--- csrf_token is defined
            # No CSRF cookie. For POST requests, we insist on a CSRF cookie,
            # and in this way we can avoid all CSRF …
Run Code Online (Sandbox Code Playgroud)

django ajax rest django-rest-framework

10
推荐指数
2
解决办法
3639
查看次数