强制 Django 在反转时使用 HTTPS URL

Posted

技术标签:

【中文标题】强制 Django 在反转时使用 HTTPS URL【英文标题】:Force Django to use HTTPS URLs when reversing 【发布时间】:2016-05-14 01:38:10 【问题描述】:

我正在 Cloud9 中运行我的 Django 应用程序,以使用通常的 ./manage.py 运行服务器进行开发。但对于外界来说,该应用程序可以通过 https:// URL 访问。

问题是,当我使用 URL 反向功能时,返回的 URL 以 http:// 开头(至少在某些时候)。当我尝试重定向到其中一个 URL 时,我在控制台中收到类似这样的错误:

Mixed Content: The page at 'https://apps.facebook.com/xxxx/' 
was loaded over HTTPS, but requested an insecure form action 
'http://xxxx.c9users.io/facebook_app/gift_shop/'. 
This request has been blocked; the content must be served over HTTPS.

我的问题:有没有办法强制反向生成 HTTPS URL 而不是 HTTP?

这是一段 sn-p 代码,它存在从 HTTPS URL 重定向到 HTTP 的问题:

class IndexRedirectView(RedirectView, CSRFExemptMixin):
    permanent = False

    def get_redirect_url(self, *args, **kwargs):
        if self.request.user.visit_count >= 5:
            return reverse('gift-shop')
        if len(BaseGiftableInstance.objects.filter(giving_user=self.request.user)) > 0:
            # has won something
            return reverse('gift-shop')
        return reverse('spinner')

【问题讨论】:

您不得使用 RUNSERVER 运行您的生产站点 @DanielRoseman 这不是我的生产站点。 虽然它是公开的。不要这样做。配置合适的网络服务器。 我仍然需要调试功能来简化开发。而且我使用的是 Cloud9,因此 Facebook 可以访问该应用程序。 @DanielRoseman Cloud9 是一个基于云的 IDE。放松一下。 【参考方案1】:

如果您使用的是 Django 1.8 或更高版本,则可以使用设置 SECURE_SSL_REDIRECT = True 强制 SSL - 请参阅 this answer 的类似问题

【讨论】:

【参考方案2】:

您应该查看django-sslify,只需安装它并将其添加到您的MIDDLEWARE_CLASSES

【讨论】:

以上是关于强制 Django 在反转时使用 HTTPS URL的主要内容,如果未能解决你的问题,请参考以下文章

django'url'模板标签错误

即使您在中途停止悬停,如何强制动画完成然后反转以开始悬停?

如何使用 django 和 aws s3 在点击时强制下载图像

python Django 跨域解决方案

编译器显示错误消息“从不强制转换的整数中生成指针”(反转数组)。我该如何解决这个问题? [关闭]

Django:使用参数'('',)'和关键字参数''反转'详细信息'