首页 > 解决方案 > 如何只允许特定国家的用户访问我的 django 网站?

问题描述

我正在建立一个由 django 提供支持的网站,仅服务于特定国家。那么,如何将所有其他国家的流量重定向到特定的错误页面?

标签: djangodjango-modelsdjango-views

解决方案


403您可以根据属于特定国家/地区的 IP 范围返回标头,或者您可以使用此来执行此操作,您可以选择特定 IP 或整个国家/地区。

from netaddr import IPNetwork, IPAddress

def get_client_ip(request):
    forbiden_ip_subnets = [...list of forbidden ip subnets...]
    x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR')
    ip = 0
    if x_forwarded_for:
        ip = x_forwarded_for.split(',')[0]
    else:
        ip = request.META.get('REMOTE_ADDR')
    for ip_sub in forbiden_ip_subnets:
        if IPAddress(ip) in IPNetwork(ip_sub):
            from django.http import HttpResponseForbidden
            return HttpResponseForbidden()

推荐阅读