django - 如何只允许特定国家的用户访问我的 django 网站?
问题描述
我正在建立一个由 django 提供支持的网站,仅服务于特定国家。那么,如何将所有其他国家的流量重定向到特定的错误页面?
解决方案
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()
推荐阅读
- python - 如何计算二维数组元素之间差异的所有组合?
- hive - Hive unix_timestamp is not recognizing difference between 12:07 and 00:07, and returns same Unix timestamp for both
- python - 使用弹性搜索的范围查询保存为“文本”类型的日期
- haskell - Haskell MonadWriter 类型签名
- c# - Sitefinity 项目中自定义 WCF 服务的访问令牌身份验证
- c - 制作文件以从serialPort写入所有信息
- regex - 如何删除最后一个 |?
- node.js - Firebase FCM - 为什么会收到:有效负载错误,无效的“android”(或“apns”)属性
- vue.js - nuxt.config.js 中的条件属性
- python - Python中矩阵的转置