Django项目中SSL(django-sslserver)的问题

3 投票
1 回答
2660 浏览
提问于 2025-04-18 01:07

我在使用 Django 1.6.2,环境是 virtualenv,操作系统是 Ubuntu 12.04 LTS。因为我想把我的项目切换到 https,所以我安装了 django-sslserver
这个项目需要自签名证书,主页运行得很好。但是,我的 Django 项目中的其他应用就出现了问题。并不是所有页面都能自动跳转到 https,这导致了 404 错误(只有在明确加上 https 前缀时才能正常工作)。而且,整体的模板(也就是外观,比如静态文件)也消失了。
这到底发生了什么呢?我该如何确保所有页面都能跳转到 https,并且和 http 的效果一样呢?

1 个回答

4

编辑:我的拉取请求已经合并了。现在静态资源可以正常提供了。

问题在于,runsslserver这个命令并没有实现提供静态资源的功能。解决这个问题的一种方法是重写 get_handler,具体操作是在 PATH_TO_PYTHON_SITE_PACKAGE/sslserver/management/commands/runsslserver.py 文件中这样做:

# ...
from django.contrib.staticfiles.handlers import StaticFilesHandler
from django import get_version

# ...

class Command(runserver.Command):
    # ...

    help = "Run a Django development server over HTTPS"

    def get_handler(self, *args, **options):
        """
        Returns the static files serving handler wrapping the default handler,
        if static files should be served. Otherwise just returns the default
        handler.

        """
        handler = super(Command, self).get_handler(*args, **options)
        use_static_handler = options.get('use_static_handler', True)
        insecure_serving = options.get('insecure_serving', False)
        if use_static_handler:
            return StaticFilesHandler(handler)
        return handler

    # ...

你可能需要用下面的命令来获取你的网站包路径:

python -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())"

我还提交了一个 拉取请求,如果你想自己分支、合并并重新安装这个包,可以参考一下。

谢谢

撰写回答