为我的网站设置geoip时出错“geoip路径必须是有效的文件或目录”

2024-06-09 16:13:13 发布

您现在位置:Python中文网/ 问答频道 /正文

对于我的django应用程序,我试图通过amdin存储登录位置的日志。

我创建了一个中间件,并尝试使用“django.contrib.gis.utils import GeoIP”来获取地理位置的纬度和经度值。

但会犯一些错误,比如:

GeoIPException位于/admin/

GeoIP路径必须是有效的文件或目录。

代码:trackware.py

from django.contrib.gis.utils import GeoIP
from core.models import Log # your simple Log model

def get_ip(request):
   xff = request.META.get('HTTP_X_FORWARDED_FOR')
   if xff:
      return xff.split(',')[0]
   return request.META.get('REMOTE_ADDR')

class UserLocationLoggerMiddleware(object):

    def process_request(self, request):
        if request.user and request.user.is_superuser:
            # Only log requests for superusers,
            # you can control this by adding a setting
            # to track other user types
            ip = get_ip(request)
            g = GeoIP()
            lat,long = g.lat_lon(ip)
            Log.objects.create(request.user, ip, lat, long)

我在设置中所做的更改。py:

MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware',

#custom middleware
    'smartDNA.trackware.UserLocationLoggerMiddleware',
)

BASE_DIR = os.path.abspath(os.path.dirname(__file__))
GEOIP_PATH =os.path.join(BASE_DIR, 'geoip')

型号.py:

class Log(models.Model):
    user = models.CharField(verbose_name="User",max_length=32)
    ip=models.IPAddressField(verbose_name="IP")
    lat= models.DecimalField(verbose_name="Lat",max_digits=10,decimal_places=1)
    long= models.DecimalField(verbose_name="Long",max_digits=10,decimal_places=1)

在管理py中注册模型

admin.site.register(Log)

请问我所犯的错误是什么,以及如何解决。。。。


Tags: djangonamepyimportiplogverboseget