Получить страну на основе IP-адреса с помощью Python Django - PullRequest
0 голосов
/ 12 июня 2018

Есть какой-нибудь фрагмент или пример, который может помочь мне выбрать страну с IP-адреса?Сначала мне нужно получить IP-адрес пользователя, а затем, исходя из этого, мне нужно выбрать страну.Ниже приведен фрагмент кода, с которого я пытаюсь начать.

from geoip import geolite2
match = geolite2.lookup('17.0.0.1')

Я пытаюсь установить пакет geoip, но он выдает ошибку ниже ошибки.

In [1]: from geoip import geolite2
In [2]: match = geolite2.lookup('17.0.0.1')                                                
-----------------------------------------------------------                                
TypeError                 Traceback (most recent call last)                                
/mnt/c/u/for_penguins/topenguins/helpers.py in <module>()                                  
----> 1 match = geolite2.lookup('17.0.0.1')                                                

/mnt/c/u/for_penguins/lib/python3.6/site-packages/geoip.py in lookup(self, ip_addr)        
    362                                                                                    
    363     def lookup(self, ip_addr):                                                     
--> 364         return self._get_actual_db().lookup(ip_addr)                               
    365                                                                                    
    366     def __repr__(self):                                                            

/mnt/c/u/for_penguins/lib/python3.6/site-packages/geoip.py in _get_actual_db(self)         
    348             if self._db is not None:                                               
    349                 return self._db                                                    
--> 350             rv = self._load_database()                                             
    351             self._db = rv                                                          
    352             return rv                                                              

/mnt/c/u/for_penguins/lib/python3.6/site-packages/geoip.py in _load_database(self)         
    340                 msg += ' It\'s provided by PyPI package "%s"' % self.pypi_name     
    341             raise RuntimeError(msg)                                                
--> 342         return mod.loader(self, sys.modules[__name__])                             
    343                                                                                    
    344     def _get_actual_db(self):                                                      

/mnt/c/u/for_penguins/lib/python3.6/site-packages/_geoip_geolite2/__init__.py in loader(dat
      7 def loader(database, mod):                                                         
      8     filename = os.path.join(os.path.dirname(__file__), database_name)              
----> 9     return mod.open_database(filename)                                             

/mnt/c/u/for_penguins/lib/python3.6/site-packages/geoip.py in open_database(filename)      
    506     with open(filename, 'rb') as f:                                                
    507         buf = mmap.mmap(f.fileno(), 0, access=mmap.ACCESS_READ)                    
--> 508     md = _read_mmdb_metadata(buf)                                                  
    509     return MaxMindDatabase(filename, buf, md)                                      

/mnt/c/u/for_penguins/lib/python3.6/site-packages/geoip.py in _read_mmdb_metadata(buf)     
    380     """Reads metadata from a given memory mapped buffer."""                        
    381     offset = buf.rfind(MMDB_METADATA_START,                                        
--> 382                        buf.size() - MMDB_METADATA_BLOCK_MAX_SIZE)                  
    383     if offset < 0:                                                                 
    384         raise ValueError('Could not find metadata')                                

TypeError: a bytes-like object is required, not 'str'   

Просто к вашему сведению, что я использую Python 3.6.3

1 Ответ

0 голосов
/ 12 июня 2018

Установить базу данных тоже: pip install python-geoip-geolite2

...