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/DRF - 405 方法不允许删除操作

方法不允许 (POST) Django 405 错误

django:通用类视图 + POST = HTTP 405(不允许的方法)

不允许使用 Django Angularjs 405 方法。 thinkster.io 教程

如何解决错误 405 方法不允许,用于 django graphql 服务器并在前端反应 axios

Django python联系电子邮件表单错误帖子不允许405