问题
我的django应用程序经常响应405 Method Now Allowed
,即使
它在开发环境上正常工作。但是如果我重启
开发服务器(python manage.py runserver
)工作。
环境
API代码
settings / urls.py(URL根文件)
from django.urls import path, include
import my_account.urls
urlpatterns = [
path('account/', include(my_account.urls, namespace='account_v1')),
]
my_account / urls.py
from django.urls import path
from .apps import MyAccountConfig
from .views import TokenView
app_name = MyAccountConfig.name
urlpatterns = [
path('token/', TokenView.as_view()),
]
my_account / views.py
from rest_framework.views import APIView
class TokenView(APIView):
def post(self, request):
# Some Business-Logic Code
pass
日志
记录405发生的时间
System check identified no issues (0 silenced).
December 07, 2018 - 11:22:54
Django version 2.1.4, using settings 'my_server.settings.staging'
Starting development server at http://0.0.0.0:8000/
Quit the server with CONTROL-C.
.env Applied
[07/Dec/2018 11:24:30] "OPTIONS /account/token/ HTTP/1.1" 200 0
[07/Dec/2018 11:24:30] "{"email":"email@hidden.com","password":"hidden_password"}POST /account/token/ HTTP/1.1" 405 66
工作时记录
System check identified no issues (0 silenced).
December 07, 2018 - 11:48:01
Django version 2.1.4, using settings 'my_server.settings.staging'
Starting development server at http://0.0.0.0:8000/
Quit the server with CONTROL-C.
.env Applied
[07/Dec/2018 11:48:08] "OPTIONS /account/token/ HTTP/1.1" 200 0
[07/Dec/2018 11:48:09] "POST /account/token/ HTTP/1.1" 200 517
在Chrome网络标签中,请求200和405之间没有区别。
答案 0 :(得分:1)
最近两个月我都遇到了同样的错误,最终我终于解决了。
错误:
当用户令牌过期时,我们将获得带有未授权消息的401状态代码,当这种情况发生时,下一个API也被中断,它将返回405 Method Not Allowed作为错误。
解决方案:
Django 2.1版中存在一个错误问题,您必须将Django版本升级到2.2版。
检查完此错误后,不会再显示该错误。
答案 1 :(得分:0)
HTTP_405_METHOD_NOT_ALLOWED
状态代码405 表示您正在使用不允许的方法进行请求。
根据您的代码,您正在定义令牌API,以通过post
方法进行访问。
查看此日志:
[07/Dec/2018 11:48:09] "POST /account/token/ HTTP/1.1" 200 517
在此,您将发送明确的POST
请求,这是可以的。但请查看提供的失败案例日志:
[07/Dec/2018 11:24:30] "{"email":"email@hidden.com","password":"hidden_password"}POST /v1/account/token/ HTTP/1.1" 405 66
1-由于某种原因,您的用户界面中,您正在使用方法{"email":"email@hidden.com","password":"hidden_password"}POST
!!!!发送请求。
2-并且您正在向/v1/account/token/
API端点发送请求,该请求根本没有在您的网址中注册(根据您提供给我们的信息)