我知道还有其他Q / A,但它们太低级了。
我想知道在django网站上实施部分SSL的正确(安全,干燥,可维护)方式是什么。
我希望在帐户页面上使用https(登录,单身,...)和“应用页面”,但将公开内容页面保留在http中。
我对各种答案持开放态度,但请解释如“在任何地方使用https,它有超过A,B,C”或的优点X,Y,Z “你必须使用2个饼干”
如果做我说的话并不是一个坏主意,我特别想知道如何处理非安全页面上的安全cookie(知道我希望通过我的网站保持一致的体验,让用户记录-in等。)。
答案 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):
...