是否有最新的 Django 地理定位模块可以为我提供使用 IP 的国家/地区?

Is there an up to date Django geolocation module that can give me countries using IP?

提问人:kod 提问时间:11/17/2022 更新时间:11/17/2022 访问量:62

问:

有没有像插入代码并进行地理定位这样简单的事情?我只想要国家/地区,以便我的网站可以切换到适当的语言。

似乎我发现的那些要么已被弃用,要么少于 10 个用户,要么是付费/试用版。

Django 国际化 Django- 地理位置

评论


答:

0赞 Egor Wexler 11/17/2022 #1

最近遇到了这个问题 - 确实只有付费选项。但是,有一个几乎免费的解决方案是为此使用 Google Cloud 功能。

https://cloud.google.com/functions/docs/create-deploy-gcloud

下面是要实现的函数的代码:

const cors = require('cors')

const corsOptions = {
  origin: true
}

function _geolocation(req, res) {
  const data = {
    country: req.headers["x-appengine-country"],
    region: req.headers["x-appengine-region"],
    city: req.headers["x-appengine-city"],
    cityLatLong: req.headers["x-appengine-citylatlong"],
    userIP: req.headers["x-appengine-user-ip"],
  }

  res.json(data)
};

exports.geolocation = (req, res) => {
  const corsHandler = cors(corsOptions);

  return corsHandler(req, res, function() {
    return _geolocation(req, res);
  });
};

然后在网页的 JS 代码中调用此函数并从中获取国家/地区。data.country

但是,如果你想要的是语言选择 - 我建议使用 Django 中包含的语言的自动选择。添加到您的中间件:

MIDDLEWARE = [
    ...
    'django.middleware.locale.LocaleMiddleware',
]

它将根据浏览器设置自动检测用户的语言。 更多的信息: https://docs.djangoproject.com/en/4.1/topics/i18n/translation