在Django中要求https连接
来源:互联网 发布:域名出售平台哪个好 编辑:程序博客网 时间:2024/06/05 14:05
在对安全较高的网站中,我们要求连接必须使用ssl加密,除了在如nginx这样的HTTP服务器中做相关配置以外,可能还会涉及在Django中做安全连接的要求,即将用户的http连接重定向到https。有以下一些方法可以满足相关需求:
一、中间件的使用:
在Django中很容易编写自定义中间件以在请求到达视图之前被调用。下面是一个中间件的示例,其可以检测一个请求是否要求安全的连接,如果需要则进行重定向操作:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
from
django.conf
import
settings
class
SecureRequiredMiddleware(
object
):
def
__init__(
self
):
self
.paths
=
getattr
(settings,
'SECURE_REQUIRED_PATHS'
)
self
.enabled
=
self
.paths
and
getattr
(settings,
'HTTPS_SUPPORT'
)
def
process_request(
self
, request):
if
self
.enabled
and
not
request.is_secure():
for
path
in
self
.paths:
if
request.get_full_path().startswith(path):
request_url
=
request.build_absolute_uri(request.get_full_path())
secure_url
=
request_url.replace(
'http://'
,
'https://'
)
return
HttpResponsePermanentRedirect(secure_url)
return
None
接下来,我们需要在settings.py中的MIDDLEWARE_CLASSES字段内加入该中间件:
1
2
3
...
'myproject.middleware.SecureRequiredMiddleware'
,
)
并增加配置项:
1
2
3
4
5
6
SECURE_REQUIRED_PATHS = (
'/admin/'
,
'/accounts/'
,
'/management/'
,
...
)
其中SECURE_REQUIRED_PATHS为一个列表或元祖,包含要求安全连接的所有路径;HTTPS_SUPPORT是一个开关,可以自定义是否开启ssl支持。
二、在一个具体的视图上要求https连接:
更多的时候,我们也许只需要在少数的几个视图中要求https连接,这时使用装饰器也许是更理想的方法,以下这个装饰器secure_required即可达到这个目的:
1
2
3
4
5
6
7
8
9
10
11
12
from
django.http
import
HttpResponseRedirect
def
secure_required(view_func):
"""Decorator makes sure URL is accessed over https."""
def
_wrapped_view_func(request,
*
args,
*
*
kwargs):
if
not
request.is_secure():
if
getattr
(settings,
'HTTPS_SUPPORT'
,
True
):
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
参考资料(以上的内容也部分来自于此):
Securing Django with SSL
Requiring https for certain paths in Django
0 0
- 在Django中要求https连接
- 在Tomcat中配置https安全连接
- 在Tomcat中配置Https安全连接
- Python中HTTPS连接
- 在tomcat中实现https安全连接的方法
- 在tomcat中实现https安全连接的方法
- 在tomcat中实现https安全连接的方法
- 在tomcat中实现https安全连接的方法
- 在tomcat中实现https安全连接的方法
- 在tomcat中实现https安全连接的方法
- 在tomcat中实现https安全连接的方法
- 在tomcat中实现https安全连接的方法
- 在Android应用中使用自定义证书的HTTPS连接
- 在tomcat中实现https安全连接的方法
- 在Android应用中使用自定义证书的HTTPS连接
- 如何在tomcat中实现https安全连接
- 在Android应用中使用自定义证书的HTTPS连接
- QT中支持https连接
- get和post的区别
- 自动加载本页面
- Android 仿iOS头像选择效果
- 24. jQuery 细节
- Java注释@interface的用法【转】
- 在Django中要求https连接
- windows 注册表解析
- 从equals()与==中理解java中对象与引用的概念
- Bulls and Cows
- SD卡初始化及读写流程
- Linux基本命令(一)
- 关于androidstuio运行程序遇到 Error:(11, 8) 错误: 无法访问HttpEntity 找不到org.apache.http.HttpEntity的类文件解决方法
- 初学者如何学习Vim
- socket编程(1)—— 一对一通信(本地IPC和网络)