为此,您还可以编写一个小型装饰器:
def login_by_ip(view_func):
def authorize(request, *args, **kwargs):
user_ip = request.META['REMOTE_ADDR']
for ip in allowedIps.allowedIps:
authenticated_by_ip = re.compile(ip).match(user_ip)
if authenticated_by_ip:
return view_func(request, authenticated_by_ip, *args, **kwargs)
return HttpResponseRedirect('/redirect/path/')
return authorize
在我的例子中,allowedIps 是一个文件(allowedIps.py),它将允许 IP 的正则表达式存储在一个元组中,如下所示:
allowedIps = ('^XXX\.XXX\..+\..+$','^XXX\.XXX\.XXX\..+$', '^XXX\.XXX\.XXX\.XXX$')
希望这可以帮助或给出一个想法。注意:如果您将 authenticated_by_ip 返回到装饰视图,您的视图将必须接受该参数,如果您不需要它也可以省略它。您还可以更精确地定义正则表达式以仅接受最多三位的数字。