如何在 Django 中使用 URL 包装器来限制 IP 访问?

2023-04-11 00:00:00 url 访问 如何在

在 Django 中,可以使用 URL 包装器来限制 IP 访问。这可以通过定义一个自定义的 URL 包装器来实现。以下是一个简单的示例:

from django.http import HttpResponseForbidden

def limit_ip(view_func):
    def wrapper(request, *args, **kwargs):
        allowed_ips = ['127.0.0.1']  # 允许访问的 IP 列表
        ip = request.META.get('REMOTE_ADDR')
        if ip not in allowed_ips:
            return HttpResponseForbidden('Forbidden')
        return view_func(request, *args, **kwargs)
    return wrapper

这个包装器接受一个视图函数作为参数,并返回一个新的包装器函数。在新的包装器函数中,先定义了一个允许访问的 IP 列表,然后获取当前请求的 IP,如果 IP 不在允许访问的列表中,则返回一个 403 禁止访问的响应,否则执行原始的视图函数。

要在视图函数中使用这个包装器,只需要在 URL 配置中将其包装在视图函数外面即可:

from django.urls import path
from .views import my_view
from .decorators import limit_ip

urlpatterns = [
    path('my-url/', limit_ip(my_view), name='my_view'),
]

这个示例演示了如何限制只有 IP 地址为 '127.0.0.1' 的客户端才能访问 my_view 视图函数。你可以在 allowed_ips 列表中添加其他 IP 地址,或者从配置文件中加载这些 IP 地址。

相关文章