有时候我们上一些网站,或者用爬虫技术去爬,使用的次数很频繁,会被网站记录加入黑名单,当我们再次访问的时候会被提示,你不能访问该网址。
那么这个技术在 Django 里面如何实现呢?
我搜索了一些方法,找到的资料不多,有一些可能有效,但是没有可以直接运行 demo,那么这里就提供一种使用中间件的 demo,亲测有效。
自定义一个 middleware.py 文件,这个文件要在 Django 的 settings.py 配置文件中被引用,所以我放在与 settings.py 同文件夹的目录下。
from django.http import HttpResponse
from django.utils.deprecation import MiddlewareMixin # 1.10.x
class TestMiddleware(MiddlewareMixin):
def process_view(self,request,view_func,*view_args,**view_kwargs):
EXCLUDE_IPS = ['192.168.1.54']
if 'HTTP_X_FORWARDED_FOR' in request.META:
ip = request.META['HTTP_X_FORWARDED_FOR']
else:
ip = request.META['REMOTE_ADDR']
if ip in EXCLUDE_IPS:
return HttpResponse('<h1>您的ip被禁止</h1>')
其中,关于自定义中间件的函数名称例如 process_view() ,还有其它的例如 _init_ 之类在文档中有具体解释,这里只用到这个。
然后在 settings.py 中引入这个中间件:
settings.py
[
'hunter.middleware.TestMiddleware',
]
其中 hunter 是我的系统的名称,在末尾添加即可。
然后重启我们的 Django 系统,就可以实现禁止特定 IP 访问的功能。
注意
这个 EXCLUDE_IPS 是我手动添加的一个列表,如果想对这个 IP 进行可持续发展的管理,可以在用户访问系统的时候记录下他们的 IP ,然后记录在 MySQL 数据库中,对其中的异常数据进行禁止的处理。
对于访问用户频繁访问、添加黑名单有很好的疗效,这里值得推荐。