Django项目中SSL(django-sslserver)的问题
我在使用 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())"
我还提交了一个 拉取请求,如果你想自己分支、合并并重新安装这个包,可以参考一下。
谢谢