Django GeoIP - Django рдлреНрд░реЗрдорд╡рд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдЖрдЧрдВрддреБрдХ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдирд╛

рджреВрд╕рд░реЗ рджрд┐рди, рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ, рдореБрдЭреЗ рдЖрдИрдкреА рдкрддреЗ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдирд┐рд╡рд╛рд╕ рд╕реНрдерд╛рди рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдХрд░рдиреЗ рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рддреЗрдЬ рдХрд░рдирд╛ рдерд╛ред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдХрд╛рд░реНрдп рдХрдард┐рди рдирд╣реАрдВ рд╣реИ рдпрджрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИред рд▓реЗрдХрд┐рди рдореБрдЦреНрдп рд╕рдорд╕реНрдпрд╛ рдпрд╣ рдереА рдХрд┐ рд░рд╛рдЬреНрдпреЛрдВ рдХреЗ рдирд╛рдо рд░реВрд╕реА рдФрд░ / рдпрд╛ рдЕрдВрдЧреНрд░реЗрдЬреА рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдПред рдореИрдВ рдЕрдирд╛рд╡рд╢реНрдпрдХ рд░реВрдк рд╕реЗ рдкрд╛рдиреА рдФрд░ рдмрдХрдмрдХ рдХреЗ рдмрд┐рдирд╛, рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдФрд░ рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рднреА рдЪрд░рдгреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрджрдо рд╕реЗ рдХрджрдо рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ред

рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ Django рдЬреАрдЖрдИрдПрд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рдмрд╕ 'django.contrib.gis' рдХреЛ INSTALLED.APPS рдореЗрдВ рджрд░реНрдЬ рдХрд░реЗрдВред рддреЛ рдпрд╣рд╛рдБ рд▓рд┐рдЦреЗрдВред рд▓реЗрдХрд┐рди рд╡реЗ рдЪреЗрддрд╛рд╡рдиреА рдирд╣реАрдВ рджреЗрддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕рдХреЗ рдмрд╛рдж рдХреА рдкреВрд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдЕрд▓рдЧ рд╣реЛ рдЬрд╛рддреА рд╣реИ рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдФрд░ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВред рд▓реЗрдЦ рдореЗрдВ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рджрд╕реНрддрд╛рд╡реЗрдЬ рдФрд░ рд╕реНрд╡рдпрдВ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреА рд╕рд╛рдордЧреНрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред


рдЖрдЗрдП рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдФрд░ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдХреЗ рд╢реБрд░реВ рдХрд░реЗрдВред рд╣рдореЗрдВ рдХреНрдпрд╛ рдЪрд╛рд╣рд┐рдП?



рдПрдХрдорд╛рддреНрд░ рдЕрдирд╕реБрд▓рдЭрд╛ рдореБрджреНрджрд╛ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдореБрдЭреЗ рдЗрд╕реЗ рдЕрд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реЗ рд╣рдЯрд╛рдирд╛ рдкрдбрд╝рд╛ред

рд╣рдо рд╕реНрд░реЛрдд рд╕реЗ рд╕рдм рдХреБрдЫ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВ

GEOS рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ



$ wget http://download.osgeo.org/geos/geos-3.2.2.tar.bz2 $ tar xjf geos-3.2.2.tar.bz2 $ cd geos-3.2.2 $ ./configure $ make $ sudo make install $ cd .. 


рд╕реНрдерд╛рдкрдирд╛ PROJ.4



рдпрд╣ рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИ рдЬреЛ рд╡рд┐рднрд┐рдиреНрди рд╕рдордиреНрд╡рдп рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдореЗрдВ рднреВ-рд╕реНрдерд╛рдирд┐рдХ рдбреЗрдЯрд╛ рдХреЛ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддрд╛ рд╣реИред

 $ wget http://download.osgeo.org/proj/proj-4.7.0.tar.gz $ wget http://download.osgeo.org/proj/proj-datumgrid-1.5.zip $ tar xzf proj-4.7.0.tar.gz $ cd proj-4.7.0/nad $ unzip ../../proj-datumgrid-1.5.zip $ cd .. $ ./configure $ make $ sudo make install $ cd .. 


рдкреЛрд╕реНрдЯрдЬреАрдЖрдИрдПрд╕ рдЗрдВрд╕реНрдЯрд╛рд▓реЗрд╢рди



PostGIS PostgreSQL рднреМрдЧреЛрд▓рд┐рдХ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рддрд╛ рд╣реИ, рдЗрд╕реЗ рдореИрдк рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдмрджрд▓ рджреЗрддрд╛ рд╣реИред GEOS рдФрд░ PROJ.4 рдХреЛ PostGIS рдХреЗ рдирд┐рд░реНрдорд╛рдг рд╕реЗ рдкрд╣рд▓реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

 $ wget http://postgis.refractions.net/download/postgis-1.5.2.tar.gz $ tar xzf postgis-1.5.2.tar.gz $ cd postgis-1.5.2 $ ./configure $ make $ sudo make install $ cd .. 


PostGIS рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдерд╛рдирд┐рдХ рдбреЗрдЯрд╛рдмреЗрд╕ рдЯреЗрдореНрдкрд▓реЗрдЯ рдмрдирд╛рдирд╛



 $ sudo su - postgres 


рдкреНрд░рд▓реЗрдЦрди рдкреГрд╖реНрда рдкрд░ рдЖрдЧреЗ , рдЙрдкрдпреБрдХреНрдд рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ рдФрд░ рдЗрд╕реЗ рдЪрд▓рд╛рдПрдВред рдЙрд╕рдХреЗ рдмрд╛рдж, рдЖрдк рдХреЗрд╡рд▓ (-T рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ) рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЯреЗрдореНрдкрд▓реЗрдЯ_рдкреЙрд╕реНрдЯрд┐рд╕ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдХреЗ рд╕реНрдерд╛рдирд┐рдХ рдбреЗрдЯрд╛рдмреЗрд╕ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ:

 $ createdb -T template_postgis <db name> 


рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕реНрдерд╛рдкрд┐рдд рд╣реИрдВред рдЕрдм рджреЗрд╢реЛрдВ рдФрд░ рд╢рд╣рд░реЛрдВ рдХрд╛ рдЖрдзрд╛рд░ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВред рдирд┐рдХрд╛рд▓реЗрдВред рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ MEDIA_ROOT / рдЬрд┐рдпреЛрдЗрдк рдореЗрдВ рд░рдЦрддрд╛ рд╣реВрдВ

рдЕрдм рд╕реЗрдЯрд┐рдВрдЧрдлреНрд░реЗрдо рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реИ:

 INSTALLED_APPS = ( #.................... 'django.contrib.gis', #.................... ) #.............................................. GEOIP_PATH = os.path.join(MEDIA_ROOT, 'geoip') GEOIP_COUNTRY = 'GeoIP.dat' GEOIP_CITY = 'GeoLiteCity.dat' 


рдЕрдм рдЖрдк рдкрд░реАрдХреНрд╖рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдореИрдВ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХреЛ рдХреЙрдкреА-рдкреЗрд╕реНрдЯ рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛ред рдпрд╣рд╛рдВ рджреЗрдЦреЗрдВ docs.djangoproject.com/en/1.3/ref/contrib/gis/geoip/#example ред рд╣рд╛рдВ, рдФрд░ рдкреНрд░рд▓реЗрдЦрди, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ, рдЕрдиреБрд╡рд╛рдж рдХрд░рдиреЗ рд▓рд╛рдпрдХ рдирд╣реАрдВ рд╣реИред рдЕрдЧрд▓рд╛ рд╕рд╡рд╛рд▓ рдЬрд┐рд╕ рдкрд░ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рд╡рд╣ рд╣реИ рд░реБрд╕реАрдлрд┐рдХреЗрд╢рдиред рд░реВрд╕реА рдореЗрдВ рджреЗрд╢ рдХрд╛ рдирд╛рдо рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ?

рдЗрд╕рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рддреАрди рдореЙрдбрд▓ рдмрдирд╛рдП:

 class WorldPart(models.Model): name_ru = models.CharField(max_length=255, verbose_name=_('Name RU'), null=True, blank=True) name_en = models.CharField(max_length=255, verbose_name=_('Name EN'), null=True, blank=True) def __unicode__(self): return self.name_ru class Meta: ordering = ['name_ru', 'name_en',] verbose_name = _('Part of the World') verbose_name_plural = _('Parts of the World') class Country(models.Model): name_ru = models.CharField(max_length=255, verbose_name=_('Name RU'), null=True, blank=True) name_en = models.CharField(max_length=255, verbose_name=_('Name EN'), null=True, blank=True) code = models.CharField(max_length=2, verbose_name=_('Code'), null=True, blank=True) worldpart = models.ForeignKey(WorldPart, verbose_name=_('Part of the World'), null=True, blank=True) flag = models.ImageField(upload_to=os.path.join(settings.STATIC_ROOT, 'img', 'flags'), verbose_name=_('Flag'), null=True, blank=True) is_active = models.BooleanField(verbose_name=_('Is active')) def __unicode__(self): return self.name_ru class Meta: ordering = ['name_ru', 'name_en',] verbose_name = _('Country') verbose_name_plural = _('Countries') class City(models.Model): country = models.ForeignKey(Country, verbose_name=_('Country')) name_ru = models.CharField(max_length=255, verbose_name=_('Name RU'), null=True, blank=True) name_en = models.CharField(max_length=255, verbose_name=_('Name EN'), null=True, blank=True) region = models.CharField(max_length=100, verbose_name=_('Region'), null=True, blank=True) postal_code = models.CharField(max_length=10, verbose_name=_('Postal Code'), null=True, blank=True) latitude = models.CharField(max_length=255, verbose_name=_('Lattitude'), null=True, blank=True) longitude = models.CharField(max_length=255, verbose_name=_('Longitude'), null=True, blank=True) is_active = models.BooleanField(verbose_name=_('Is active')) def __unicode__(self): return self.name_ru class Meta: ordering = ['name_ru', 'name_en',] verbose_name = _('City') verbose_name_plural = _('Cities') 


рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░, рдореБрдЭреЗ рдХрдИ рджреЗрд╢реЛрдВ рдФрд░ рд╢рд╣рд░реЛрдВ рдХреЗ рд╕реБрдВрджрд░ рдбреЗрдЯрд╛рдмреЗрд╕ рдорд┐рд▓реЗ, рдФрд░ рдЗрд╕реЗ рдЙрди рд╕рднреА рдХреНрд╖реЗрддреНрд░реЛрдВ рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛, рдЬрд┐рдирдХреА рдореБрдЭреЗ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдореИрдВ рдард┐рдХрд╛рдиреЛрдВ рдкрд░ рд▓рд┐рдВрдХ рдкреЛрд╕реНрдЯ рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛, рдкреАрдПрдо рдкрд░ рджрд╕реНрддрдХ рджреВрдВрдЧрд╛ред

рдФрд░ рдпрд╣ рдкреВрд░рд╛ рддрдВрддреНрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

 #   >>> from django.contrib.gis.utils import GeoIP >>> from myapp.models import * >>> g = GeoIP()    >>> cn = g.country('google.com') >>> cn {'country_code': 'US', 'country_name': 'United States'} >>> try: >>> cn_db = Country.objects.get(code=cn['country_code']) >>> except Country.DoesNotExist: >>> pass 


рд╡рд╣ рд╕рдм рд╣реИред рд╢рд╛рдпрдж рдХреБрдЫ рдЕрддрд┐рд╢реНрдпреЛрдХреНрддрд┐рдкреВрд░реНрдг рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдореБрдЦреНрдп рдмрд┐рдВрджреБрдУрдВ рдХреЛ рдпрдерд╛рд╕рдВрднрд╡ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд░реВрдк рд╕реЗ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреАред рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк рд╕рднреА рдХрд╛ рдзрдиреНрдпрд╡рд╛рджред

Source: https://habr.com/ru/post/In179643/


All Articles