Django项目中的国家/地区明智的访问限制

时间:2019-07-12 17:32:04

标签: python django

当用户打开Django项目的任何链接时,在打开此链接之前,我想应用国家/地区限制。管理员有权在数据库表中添加国家/地区,如果表中有国家/地区可用,则网址将打开,否则将显示一条消息,限制国家/地区

3 个答案:

答案 0 :(得分:0)

好的。

您只需要找出用户所在的国家(例如django-geoip package和免费的Maxmind数据库),然后对照数据库表/模型中的国家列表检查确定的国家/地区,然后提出如果未通过,则为例外。

答案 1 :(得分:0)

这可以通过两种方式完成,一种是将IP地址映射到@AKX所指向的国家,另一种是将纬度,经度映射到一个国家。任何前端客户端Web / Mobile都可以使用其本机API为用户提供时间。此数据可用于查询Google Maps API。 该api看起来像这样,您必须注册才能获取密钥。

https://maps.googleapis.com/maps/api/geocode/json?latlng=<lat>,<long>&key=<key>

def check_for_whitelisted_country(lat, long)
    r = requests.get(api)
    if r.status_code == 200:
    data = json.loads(r.text)
    for item in data['results'][0]['address_components']:
        if 'country' in item['types']:
            country = item['long_name']
            # if country in database return True

现在要使用此功能,请考虑基于示例类的视图。

class DoSomething(views.APIView):

    def get(self, request):
        try:
            lat = request.GET['lat']
            long = request.GET['long']
            if check_whitelisted_country(lat, long):
               # permit the action
            else:
                return Response({"Failure": "Invalid client."}, status=status.HTTP_403_FORBIDDEN)

希望这会有所帮助。

答案 2 :(得分:0)

您可以在 Django 中使用中间件(请参阅 here)。

编写具有 /* Animate */ span { animation: animate 5s linear infinite, moving 18s infinite; outline: none; line-height: 0.70em; } @keyframes animate { 0% { color: #fff; text-shadow: none; } 100% { color: #B37A4C; text-shadow: 0 0 10px #B37A4C; } } @keyframes moving { 0%{margin-left: 100px;} 10%{margin-left: 50px;} 20%{margin-right: 100px;} 30%{margin-right: 50px;} 40%{margin-left: 100px;} 50%{margin-left: 50px;} 60%{margin-right: 100px;} 70%{margin-right: 50px;} 80%{margin-left: 100px;} 90%{margin-left: 50px;} 100%{margin-right: 100px;} } /* animate */ /* media queries */ @media (max-width:1200px){ html{ font-size: 55%; } .home{ padding:1rem 4rem; } } @media (max-width:991px){ header{ left:-120%; } #menu{ display: block; } header.toggle{ left:0%; } body{ padding:0; } } @media (max-width:768px){ html{ font-size: 50%; } } @media (max-width:400px){ header{ width: 100vw; } .heading{ margin:0 3rem; } .about .row .counter .box{ width: 100%; } .education .box-container .box{ width:100%; } .portfolio .box-container .box{ width:100%; } .contact .row form{ margin:3rem 0; } span .moving{ display: none; } } 作为参数的自定义中间件。在每个 request 上,我们在 request 中获得 IP 地址。获取此 IP 地址并找到他的国家/地区(您可以为此使用 3rd 方 API)。 see this answer
根据您的限制区域检查用户的区域。如果它被限制,发送错误消息作为响应。