Lütfen aşşağıdaki yönergeleri takip ederek görevleri tamamlayın.
- Python env oluşturun
- Requirements.txt oluşturun
- .gitignore dosyası oluşturun
- Aşağıdaki Kütüphanelerin Son Versiyonlarını Kurun
- Django
- Django Rest Framework
- Başka kütüphaneye ihtiyacınız varsa kurablirsiniz.
- Django projesi oluşturun
- Yeni app oluşturun
location
- Modelleri Ekleyin
- Country
- name
- search_text
- search_count
- code
- phone_code
- City
- name
- search_text
- search_count
- country
- Airport
- name
- search_text
- search_count
- code
- country
- city
- Country
- Fixture dosyasındaki verileri data migration oluşturarak yükleyin
- Location Modellerdeki
name
,search_text
vesearch_count
zorunlu olmalı eklenmediğinde uygulama hata vermeli - Location appte
search_text
alanı için bir management komudu oluşturun.python manage.py XXX
- Bu command ile tüm location modeller için search text oluşmalı.
- Search text kendi ve üst ilişkideki modellerin name alanını içermeli
- Airport => 'airport.name,airport.city.name,airport.country.name'
- Location modelleri için
XXX.objects.search('Ankara')
gibi bir arama yapıldığında en doğru sonuçları getiren.search
fonksiyonunu yazın.(models.Manager ve models.QuerySet)
- Fonksiyon küçük büyük harf duyarlı olmalı
- Unaccent aramalardada sonuç verebilmeli
- Örn: Niğde ve NİgDe aynı sonuçları verebilmeli
- Aşağıdaki endpointleri oluşturun (Rest Framework)
- Tüm Location Modeller için Search End Point
- Yukarıda belirtilen search fonksiyonunu kullanarak en fazla 20 tane sonuç getirecek.
- Tüm Location Modeller için Select End Point
- Bir lokasyonun seçilmesi sağlanır.
- Select olduğunda request içine Cookie ile seçili model ve lokasyonun id'si kayıt edilir.
- Deselect End Point
- Cookieden seçili olan lokasyonu temizler.
- Tüm Location Modeller için Search End Point
- Bir lokasyon seçildiğinde search_count'u artmalı
- Aynı Zamanda üst ilişkilerininde search_countu artmalı
- Eğer atılan request cookilerinde bir lokasyon seçilmiş ise search_count artmalı
- Aynı Zamanda üst ilişkilerininde search_countu artmalı
- Response 200 kodu ile dönmüyorsa search_count artmamalı.
- Eğer yeni bir lokasyon modeli eklenirse örn:
Stations
tüm yapı bu model içinde çalışmalı
- Counry Most Searched Cities End Point
- Ülke kodu gönderilir ve en çok aranan 5 şehiri listelenir
- 1 den fazla ülke kodu gönderilebilir.
- Sonuçlar ülkeye göre gruplu gelmelidir.
- Country Search Ratio
- Ülke kodu gönderilir ve toplam şehir araması sayısı toplam airport arama sayısına bölünüp bir oran çıkarılır.
- Bu oranla birlikte ülke bilgileri geri dönülür.
- 1 den fazla ülke kodu gönderilebilir.
- 1 kullanıcı sadece 1 lokasyon seçebilir.
- Projeyi fork edip kendi reponuzu oluşturun
gitignore
verequirements.txt
dosyanızın doğru bir şekilde oluşturun.- Kodlarınızı olabildiğince temiz ve anlaşılır yazmaya özen gösterin.
- Kodlarınızı yazarken bildiğiniz en iyi yöntemler ile yazmaya çalışın.
- Görevlerden çok yazdığınız kodun önemli olduğunu unutmayın.
- şehirleri veritabanına yüklemeden önce ülke json'unu yükleyin
- ülkeleri ve şehirleri json yükleme komutu aşağıdaki gibidir
python manage.py load_json_data --model ulke --json-file ./path/to/countries.json
python manage.py load_json_data --model sehir --json-file ./path/to/cities.json
- to populate the search_text field, use this command
python manage.py generate_search_text
- API'mızın URL uç noktası aşağıdaki gibidir
api/locations/search?query=istanbul
[GET]api/locations/select/
[POST] konum seçmeye yönelik uç nokta, bu iki alanı içeren bir json gövdesinin gönderilmesini bekleyen bir gönderi isteğidir:- id
- model : "model" alanı üç olası dizeden birini bekler, "country", "city", "airport"
api/locations/country-most-searched-cities?country_codes=TR,DE,KE
[GET]api/locations/country-search-ratio?country_codes=TR,DE,KE
[GET]api/locations/deselect/
[GET]