【问题标题】:Django redirect to custom URLDjango 重定向到自定义 URL
【发布时间】:2012-09-01 19:59:38
【问题描述】:

如何从我的 Django 应用程序中将用户重定向到 somescheme://someurl.com?

为了给你一些上下文以防万一,我有一个用 Python/Django 编写的工作 oauth2 服务器,我需要允许用户注册具有自定义 URL 方案的 redirect_uris。此自定义 URL 方案用于 handling the redirect within native apps。

我的第一反应是使用 HttpResponseRedirect,但是这个 URL 有一个自定义方案并且不是 HTTP,所以我猜这不是我想要的。提前感谢您提供的任何建议。

编辑: 我确实尝试过,Django 正确返回响应重定向而不会引发错误,但浏览器不会重定向到此 URL。我正在使用 Chrome 进行测试。

编辑 2: HttpResponseRedirect 在 safari 中运行良好。

【问题讨论】:

  • 你试过了吗?重定向响应会返回到客户端,因此它可能会正常工作。

标签: python ios django oauth-2.0 custom-url


【解决方案1】:

这实际上不应该工作,因为出于安全原因,默认情况下 Django 只允许重定向到 http、https 和 ftp:

https://www.djangoproject.com/weblog/2012/jul/30/security-releases-issued/

我在使用 OAuth 并重定向到自定义方案时遇到了同样的问题。
Django(在 Apache 上)在重定向到自定义方案时抛出 500 个(django.core.exceptions.SuspiciousOperation)。解决方案是创建您自己的 HttpResponseRedirect 子类,或者只是这样做:

location = < your redirect URL >
res = HttpResponse(location, status=302)
res['Location'] = location
return res

【讨论】:

  • 感谢您的提醒!我还没有尝试过,但如果我这样做并且它有效,它将标记它是正确的。我使用的是 Django 1.4.0,这可能是我没有注意到这个问题的原因。
  • 只是为了补充一点,我发现(对于 Django 1.6),如果您将 HttpResponseRedirect 子类化,您还需要将自定义协议添加到 allowed_schemes 类变量中,否则 Django仍然会提高SuspiciousOperation
【解决方案2】:

类 HttpResponseRedirect

构造函数的第一个参数是必需的——重定向到的路径。这可以 > 是完全限定的 URL(例如 'http://www.yahoo.com/search/')或没有 >domain 的绝对路径(例如 '/search/')。有关其他可选构造函数参数,请参阅 HttpResponse。请注意>这将返回 HTTP 状态代码 302。

这是从这里: https://docs.djangoproject.com/en/dev/ref/request-response/

从我正在阅读的内容来看,它应该可以正常工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-02
    • 1970-01-01
    • 2012-03-12
    • 2015-09-24
    • 1970-01-01
    • 1970-01-01
    • 2015-03-11
    相关资源
    最近更新 更多