强制 Django 在逆向时使用 HTTPS URL
Force Django to use HTTPS URLs when reversing
我是 运行 我在 Cloud9 中的 Django 应用程序,用于开发目的,使用通常的 ./manage.py 运行服务器。但对于外界,该应用程序可通过 https:// URL.
访问
问题是,当我使用 URL 反向函数时,返回的 URLs 以 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?
这是一段代码,在从 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')
您应该查看 django-sslify,您只需安装它并将其添加到您的 MIDDLEWARE_CLASSES
。
如果您使用的是 Django 1.8 或更高版本,您可以使用设置 SECURE_SSL_REDIRECT = True
强制使用 SSL - 请参阅 this answer 上的类似问题
我是 运行 我在 Cloud9 中的 Django 应用程序,用于开发目的,使用通常的 ./manage.py 运行服务器。但对于外界,该应用程序可通过 https:// URL.
访问问题是,当我使用 URL 反向函数时,返回的 URLs 以 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?
这是一段代码,在从 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')
您应该查看 django-sslify,您只需安装它并将其添加到您的 MIDDLEWARE_CLASSES
。
如果您使用的是 Django 1.8 或更高版本,您可以使用设置 SECURE_SSL_REDIRECT = True
强制使用 SSL - 请参阅 this answer 上的类似问题