جداول شهر و کشور برای Django

با سلام و درود، من با پیش فرض اینکه آشنایی مقدماتی با پایتون و دیجنگو دارید این آموزش رو پیش میرم. تو این آمزوش قصد دارم روشی برای استفاده از جداول شهر و کشور ها برای استفاده از پروژه های Django (دیجنگو) بهتون معرفی کنم.

معرفی

خب برای این منظور من از django-cities استفاده کردم. ( لینک پروژه در گیتهاب – GitHub )

پیش نیاز

برای پروژه فوق پایگاه داده های شما باید از spatial queries پشتبیانی بکنه. ( برای اطلاعات بیشتر به اینجا نگاهی بیاندازید)

من از دیتابیس Postgre استفاده می کنم و برای این منظور باید postgis را نصب کنم. برای این کار کافیه فقط دستور زیر را اجرا کنید :

sudo apt-get install postgis

حال نوبت به پروژه django خودتون می شود، برای تغییرات فقط باید داخل فایل setting پروژه، backend پایگاه داده را به عبارت زیر تغییر دهید:

django.contrib.gis.db.backends.postgis

کار بعدی افزودن خط زیر در همون فایل settingمی باشد و فقط نام پایگاه داده رو به نام دیتابیس خودتون تغییر دهید :

POSTGIS_TEMPLATE = 'database_name'

خب اکثر کار تا اینجا انجام شده.

نصب django-cities

برای نصب ، آسونترین روش دستور زیر هست:

pip install django-cities

یا با wget فایل زیپ را دانلود و سپس استخراجش کنید:

wget https://github.com/coderholic/django-cities/archive/master.zip
unzip master.zip

حالا که نصب را انجام دادید، در قدم اول باید ‘cities’, را به INSTALLED_APPS داخل فایل setting پروژه اضافه کنید :

حال وقتش رسید که پروژه را migrate کنید تا جداول شهر و کشور به پایگاه داده تان اضافه شود،

python manage.py makemigrations
و 
python manage.py migrate

خب در تصویر زیر می بینید که جداول به درستی به پایگاه داده اضافه شده اند (تصویرذیل از pgadmin گرفته شده است ):

خب جداول اضافه شدند ولی هنوز داده ای داخلشون نیست، نوبت به import کردن رسید، یه سری تنظیمات باید داخل فایل setting پروژه اضافه بشه ، دستورات از قرار زیر هستند:

CITIES_DATA_DIR = os.path.join(BASE_DIR, 'cities')
CITIES_VALIDATE_POSTAL_CODES = True
CITIES_LOCALES = ['en', 'und', 'LANGUAGES', 'ira', 'pes']
CITIES_POSTAL_CODES = ['ALL']


CITIES_FILES = {
    # ...
    'city': {
       'filename': 'cities1000.zip',
       'urls':     ['http://download.geonames.org/export/dump/'+'{filename}']
    },
    # ...
}

خط اول دایرکتوری دانلود می باشد، حواستون باشه باید دایرکتوری قابل نوشتن (writable) باشد. باقی خطوط نیز مشخص هست و هر تغییری دوست داشتید می تونید بدید.

بعد از تنظیمات فوق نوبت به دستور پایانی می رسه :

python manage.py cities --import=all

صبر، صبر و صبر 🙂 صبر داشته باشید تا دانلود ها تکمیل بشه.

البته توجه داشته باشید که دستور بالا به import تمامی داده ها می پردازد و طولانی خواهد بود (مخصوصا importکردن داده های مربوط به کد پستی)

اگر فقط کشور ها و شهر ها را می خواهید، از دو دستور زیر استفاده کنید:

python manage.py cities --import=country

python manage.py cities --import=city

پس از import در تصویر زیر مشاهده می کنید که برای مثال جدول کشور ها را شنان داده است: