Django SSL仅适用于某些页面

时间:2013-12-23 11:43:23

标签: django ssl https session-cookies

我知道还有其他Q / A,但它们太低级了。

我想知道在django网站上实施部分SSL的正确(安全,干燥,可维护)方式是什么。

我希望在帐户页面上使用https(登录,单身,...)和“应用页面”,但将公开内容页面保留在http中。

我对各种答案持开放态度,但请解释如“在任何地方使用https,它有超过A,B,C”的优点X,Y,Z “你必须使用2个饼干”

如果做我说的话并不是一个坏主意,我特别想知道如何处理非安全页面上的安全cookie(知道我希望通过我的网站保持一致的体验,让用户记录-in等。)。

1 个答案:

答案 0 :(得分:4)

每当您需要一些需要在某些选定视图上应用的功能时,就可以使用装饰器了。另一方面,如果你想实现应该应用于所有请求的东西,那么我们应该使用中间件。

创建一个装饰器,将传入的请求重定向到https。

#decorators.py
from django.http import HttpResponseRedirect

def secure_required(view_func):
    def _wrapped_view_func(request, *args, **kwargs):
        if request and not request.is_secure():
            request_url = request.build_absolute_uri(request.get_full_path())
            secure_url = request_url.replace('http://', 'https://')
            return HttpResponseRedirect(secure_url)
        return view_func(request, *args, **kwargs)
   return _wrapped_view_func

在views.py

from decorators import secure_required

@secure_required
def myViewFunction(request):
    ...