405 方法不允许,Django + ngrok,仅在我的本地机器上
Posted
技术标签:
【中文标题】405 方法不允许,Django + ngrok,仅在我的本地机器上【英文标题】:405 method not allowed, Django + ngrok, only on my local machine 【发布时间】:2021-08-31 19:12:13 【问题描述】:这是一个遗留项目,我正在与当前工作中的其他人合作。 并且正在做我无法理解的非常奇怪的行为。
它返回 405 http 响应状态,这没有意义,因为这个视图已经接受了 POST 请求
我会分享几个 sn-ps,我只是在我要标记的评论中发现这种情况。
这是视图文件,它实际上接受 GET 和 POST 方法
@csrf_exempt
@load_checkout
@validate_cart
@validate_is_shipping_required
@require_http_methods(["GET", "POST"])
def one_step_view(request, checkout):
"""Display the entire checkout in one step."""
这是修改响应的装饰器,返回 405。
def load_checkout(view):
"""Decorate view with checkout session and cart for each request.
Any views decorated by this will change their signature from
`func(request)` to `func(request, checkout, cart)`."""
@wraps(view)
@get_or_empty_db_cart(Cart.objects.for_display())
def func(request, cart):
try:
session_data = request.session[STORAGE_SESSION_KEY]
except KeyError:
session_data = ''
tracking_code = analytics.get_client_id(request)
checkout = Checkout.from_storage(
session_data, cart, request.user, tracking_code)
response = view(request, checkout, cart) # in this response it returns 405.
if checkout.modified:
request.session[STORAGE_SESSION_KEY] = checkout.for_storage()
return response
return func
我什么时候可以开始找出问题的任何想法或线索?
郑重声明:我没有编写此代码,几天前它还在工作,它只是在我的本地环境中发生,在舞台和生产中,甚至其他开发人员的本地工作都很好。我有所有的需求和依赖,并且已经更新了。
顺便说一句,我正在使用 ngrok 进行隧道传输
--
【问题讨论】:
什么函数实际上被称为view
?您可以使用调试器进入该函数以查看它返回 405 的原因吗? (我认为它不是 one_step_view()
,因为该函数只接受两个参数,但您使用三个参数调用 view()
。)
是的,它是 one_step_view()。我会编辑并将其添加到问题中
【参考方案1】:
如果你的前端使用不同的 HOST && PORT 你需要在 Django 应用中添加 CROS
【讨论】:
以上是关于405 方法不允许,Django + ngrok,仅在我的本地机器上的主要内容,如果未能解决你的问题,请参考以下文章
django:通用类视图 + POST = HTTP 405(不允许的方法)
不允许使用 Django Angularjs 405 方法。 thinkster.io 教程