我在Heroku(雪松堆栈)上有python/Django应用程序,并想让它只能通过https访问.我已经启用了"SSL Piggyback"选项,并且可以通过https连接到它.

但是,禁用http访问或重定向到https的最佳方式是什么?

推荐答案

将@CraigKerstiens和@allanlei的答案组合成我已经测试并验证有效的东西.当REQUEST为SSL时,Heroku将HTTP_X_FORWARD_PROTO设置为https,我们可以用这个来判断:

from django.conf import settings
from django.http import HttpResponseRedirect


class SSLMiddleware(object):

    def process_request(self, request):
        if not any([settings.DEBUG, request.is_secure(), request.META.get("HTTP_X_FORWARDED_PROTO", "") == 'https']):
            url = request.build_absolute_uri(request.get_full_path())
            secure_url = url.replace("http://", "https://")
            return HttpResponseRedirect(secure_url)

Django相关问答推荐

Django www.example.com从常量列表中删除值

使用OuterRef过滤器获取Django记录的最大值

访问默认的 django-allauth 登录和注册页面时出现 TemplateSyntaxError

Django AWS S3对象存储boto3媒体上传报错

如何在视图中的 Django 重定向末尾附加字符串?

如何在 Django 模板中的计数器上进行 for 循环中断?

Django ORM 查询优化问题

使用 Python/Django 上传大文件

使用 args 和选项编写自定义管理命令 - 所需字段说明

是否可以在没有模型的情况下创建自定义管理视图

在 Django 的 ORM 中访问存储过程的最佳方法是什么

模型 Django 中的 ID 字段

Django - 如何从模型实例中获取管理员 URL

Django 覆盖模型 Clean() 与 Save()

Django:何时使用 QuerySet 无

UpdateView 中的success_url,基于传递的值

基于 User-Agent 更改 Django 模板

Django中reverse()和reverse_lazy()的区别

左加入 Django ORM

如何获取 Django 模型字段对象的值