强制 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 和 aws s3 在点击时强制下载图像