从 AngularJS POST 到 Django API 以获取 JWT 并返回 405 错误

Posted

技术标签:

【中文标题】从 AngularJS POST 到 Django API 以获取 JWT 并返回 405 错误【英文标题】:POST from AngularJS to Django API to obtain JWT and returning a 405 error 【发布时间】:2017-09-19 01:31:17 【问题描述】:

当我执行 POST 以获取应该接受 POST 请求的端点中的令牌时,我得到了这个 405。

我正在使用 rest_framework 和 rest_framework_jwt

端点:

from django.conf.urls import url
from django.contrib import admin
from rest_framework_jwt.views import obtain_jwt_token
from rest_framework_jwt.views import refresh_jwt_token
from rest_framework_jwt.views import verify_jwt_token

urlpatterns = [
    url(r'^$', IndexView.as_view(), name='index'),
    url(r'^api/api-token-auth/', obtain_jwt_token),
    url(r'^api/api-token-verify/', verify_jwt_token),
    url(r'^api/api-token-refresh/', refresh_jwt_token),

]

AngularJS 发布:

$scope.login = function () 

          $http.post('api/api-token-auth/',
              
                'username': $scope.username,
                'password': $scope.password
              )
              .success(function (response) 
                $scope.logged = true;
                $scope.jwt = response.token;
                console.log(response.token);
                store.set('token', response.token);
              ,function (response) 
                 $scope.logged = false;
                 console.log(response);
              );
        

在 Postman 中执行 POST 时遇到同样的错误

【问题讨论】:

您能否发布您的views.py、serializers.py、models.py 和settings.py(DRF 配置部分),以及您在客户端收到的错误消息形成响应? HTTP 405 错误意味着方法不允许,因此可能是身份验证/授权问题设置默认设置或某处。无论哪种方式,拥有更多信息将有助于调试它。 当请求进入视图但没有方法处理程序时,您通常会在 DRF 中看到 405。我将通过在 URL conf 中将其替换为自定义视图来检查以确保请求将转到您认为的视图。我发现您的 URL 模式末尾缺少“$”,这可能会导致请求转到意外视图。 【参考方案1】:

我发现了问题,在我的路线中我有这个 AngularJS 路线:

url(r'^(?P<path>.*)/$', IndexView.as_view()),

所以我改成:

url(r'^/$', IndexView.as_view()),

成功了

【讨论】:

以上是关于从 AngularJS POST 到 Django API 以获取 JWT 并返回 405 错误的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Django 和 AngularJS 创建 POST 请求(包括 CSRF 令牌)

CSRF 令牌丢失或不正确。 Django + AngularJS

Django 和 AngularJS:如何显示来自 Django 调试错误消息的 Angular $http 错误

Django Rest Framework + AngularJS:CSRF 保护的正确方法?

与 AngularJS 一起使用时,Django 模板不呈现 JSON 响应

Django/AngularJS:如何从我的 AngularJS 脚本访问我的 Python 上下文项