在 Django 中为 GeoIP2 创建项目设置

Posted

技术标签:

【中文标题】在 Django 中为 GeoIP2 创建项目设置【英文标题】:Creating project settings for GeoIP2 in Django 【发布时间】:2016-01-30 15:42:59 【问题描述】:

我正在尝试使用适用于 Django 的 GeoIP2,它要求您在 GEOIP_PATH 设置中设置您的国家和城市数据集的路径。我的问题是我不知道我应该把这个设置放在哪里,以便 Python shell 之类的东西可以看到它。

我假设它会进入 settings.py,但我不确定这个特定模块的语法,而且 Django 文档在这方面绝对是垃圾。

【问题讨论】:

【参考方案1】:

你说得对,它应该放在 Django 的 settings.py 文件中。您应该能够在您的 Django 项目/应用程序中的某处找到此文件。然后将以下内容放入该文件中:

GEOIP_PATH = '/path/to/your/geoip/datafiles'

GEOIP 将能够找到它在应用程序中使用所需的文件。

编辑


如果您想通过 python shell 为 Django 尝试 GeoIP2,您必须按照以下步骤操作(请注意,我使用 Windows 来回答这个问题,但对于基于 linux 的操作系统应该是相同的):

注意:如果您已经设置了 Django 项目,则可以从第 10 步开始。

    确保您已安装 Python(我使用 Python 3.5.1 回答此问题),包括 pip

    安装 virtualenvwrapper:pip install virtualenvwrapper-win(或 pip install virtualenvwrapper 用于非 Windows 安装)

    为您的项目创建一个虚拟环境:mkvirtualenv GeoIP

    为此项目安装 Django:pip install django

    要检查安装是否成功,请执行django-admin --version,这应该会显示 Django 安装的版本,对我来说是1.9.1。如果你没有看到这个,请确保你的 python 安装是正确的。

    创建要保存项目的目录。就我而言,我创建了一个名为 Django 的目录:mkdir Django

    移至此目录:cd Django

    创建一个 Django 项目:django-admin startproject geoip_test

    移动到 Django 为你创建的新目录:cd geoip_test

    安装geoip2:pip install geoip2

    创建一个目录来存储required datasets。请注意,这些必须解压缩:mkdir geoip。把你下载解压的文件放在这个目录下。

    启动 Django Python shell:python manage.py shell

    导入 GeoIP2:>>> from django.contrib.gis.geoip2 import GeoIP2

    通过实例化一个类来创建一个 GeoIP2 对象,该类具有您下载的文件所在位置的路径:>>> g = GeoIP2('geoip')

    测试一切正常:>>> g.country('google.com')'country_code': 'US', 'country_name': 'United States'

【讨论】:

这是否包括它也可以在 shell 中找到?因为我只是得到一个“配置错误”的错误,甚至以这种方式设置路径。 @BHouwens 你是什么意思?您是在尝试从 shell 运行文件还是在 shell 中使用 python 来尝试执行一些命令? 我正在尝试在 python shell 中测试它 没问题,很高兴我能帮上忙【参考方案2】:

我找到的简单步骤

    点安装 geoip2 注册geoip2 下载 GeoIP2 和 GeoIP Legacy Databases gzip 文件, page should look like this 通过在控制台中运行 tar -xzf zip_file_name.tar.gz 将文件解压缩到 Django 项目文件夹的根目录中 在您的 views.py 中为您需要的任何应用程序,如下所示实施

.

from django.contrib.gis.geoip2 import GeoIP2
def index(request):
 g = GeoIP2('GeoLite2-Country_20223519') #Enter folder name
 country_code = g.country_code('15.194.1.177') #Enter IP address

【讨论】:

以上是关于在 Django 中为 GeoIP2 创建项目设置的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 GeoIP2() django 模型从 IP 地址调用中提取保存的信息以显示在我的 html 中

Django:如何在管理视图中为 readonly_field 设置默认随机值?

在 Visual Studio 中为其他版本的 Django 创建生成的新项目

在 Django 项目中为可重用应用程序创建基于类的 Celery 任务

有没有办法在 Django 中为内联管理表单设置单独的页面?

带有 uWSGI 的 Django 中 Geoip2() 上的“[Errno 12] 无法分配内存”