当用户打开Django项目的任何链接时,在打开此链接之前,我想应用国家/地区限制。管理员有权在数据库表中添加国家/地区,如果表中有国家/地区可用,则网址将打开,否则将显示一条消息,限制国家/地区
答案 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
根据您的限制区域检查用户的区域。如果它被限制,发送错误消息作为响应。