【问题标题】:405 method not allowed, Django + ngrok, only on my local machine405 方法不允许,Django + ngrok,仅在我的本地机器上
【发布时间】: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()。我会编辑并将其添加到问题中

标签: python django http debugging ngrok


【解决方案1】:

如果你的前端使用不同的 HOST && PORT 你需要在 Django 应用中添加 CROS

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-27
    • 2020-07-04
    • 2023-03-05
    • 2020-12-02
    • 2019-07-05
    • 2021-09-17
    • 1970-01-01
    相关资源
    最近更新 更多