Django:检查模板的连接是否安全?

时间:2010-12-05 19:15:32

标签: django ssl

我想从我的模板中检查我的网站是否在HTTPS下运行,以便我可以有条件地将S添加到我的外部JavaScript库(即jQuery)的HTTP中。我怎么能这样做?

4 个答案:

答案 0 :(得分:14)

如果您的资源托管在与提供请求相同的计算机上,则可能根本不需要指定网址方案:

<script src="/static/js/myfile.js" type="text/javascript"></script>

这将使用与原始页面请求相同的协议(http或https)和服务器。

编辑2(2016):

如果您正在访问另一台服务器上的资源,现在最好的解决方案(如pointed out by mpen below)是使用相对URL方案:

<script src="//media.example.com/static/js/myfile.js" type="text/javascript"></script>

这将使用http或https自动连接到服务器,具体取决于与当前页面的连接。

请注意,如果您需要支持旧浏览器,则可能会导致some problems

修改:或者,如果您出于某种原因确实需要模板中的信息,则可以add the request context processor在视图中使用RequestContext。这会在模板上下文中放置一个request变量,这样您就可以访问HttpRequest对象。然后,您可以通过检查request.is_secure

的值来测试请求是否安全

例如:

<script src="http{% if request.is_secure %}s{% endif %}://media.example.com/static/js/myfile.js" type="text/javascript"></script>

答案 1 :(得分:7)

我不确定Google是否在我提出这个问题的时候这样做了,但他们现在建议您通过

添加库
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>

//将使用您当前使用的任何方案 - 无需额外的代码或条件。

答案 2 :(得分:6)

使用is_secure()查看视图中的请求,并将其发送到模板。

答案 3 :(得分:1)

请考虑使用{% static %}模板标记(在Django&gt; = 1.4中),该标记可以配置为在单独的域或服务器上托管媒体文件。这将消除您的is_secure问题。

https://docs.djangoproject.com/en/dev/ref/contrib/staticfiles/#std:templatetag-staticfiles-static