从 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 保护的正确方法?