Kullanıcıların login olarak entry girmesini sağlayan bir sistemdir. Projenin yapımında docker, django, elasticsearch, rest, unit test ve black teknolojileri kullanıldı. Custom token sistemi ve elasticsearchte query string yerine search ve Q querysi kullanıldi.
Not: Elasticsearch ve postgresql ilk önce yüklenilmelidir. Aşağıdaki işlermler server kurulumu için yapılması gerekenlerdir.
-> Environment oluşturulması için aşağıdaki terminale proje konumununa gelinerek kodu yazılmalıdır.
python -m venv venv
-> Environmetin içine girilmesi gerekiyor. Bu işlem işletim sistemine göre değişkenlik göstermektedir. Aşağıdaki kodları(windows makine için) yazarak environmet içerisine girilir.
source venv/Scripts/activate
-> Gerekliliklerin yüklenilmesi için aşağıdaki komut yazılmalıdır.
pip install -r requiremets.txt
-> Veritabanının oluşması için aşağıdaki komutlar yazılmalıdır.
python manage.py makemigrations # Migrationların oluşturulması için kullanılır.
python manage.py migrate # Migrationların database uygulanması için kullanılır.
-> Elasticsearch içerisinde indexlerin oluşturulması için aşağıdaki komut yazılmalıdır.
python manage.py search_index --rebuild
-> Yukarıdaki kurulum işlemleri yapıldıktan sonra aşağıdaki kod yazılarak projeyi ayağa kaldırılır.
python manage.py runserver 0.0.0.0:8000
-> Curl üzerinde json veriyi formatlı görmek istiyorsak aşağıdaki komutu yazılmalıdır.
curl -u <KullanıcıAdı>:"<Parola>" -X GET "http://localhost:9200/entries/_search" | python -m json.tool
"docker-compose.yml" dosyası içerisinde herşey ayarlanmıştır. Aşağıdaki konut yazılarak tüm gereklilikler yüklenip daha sonrasında proje run edilir.
docker-compose up --build -d
Login olabilmek için "{baseUrl}/api/login" urline istek atılır.Dönen response ta access_token,refresh_token token bilgileri gelmektedir. Diğer urllere istek atılırken headerı aşağıdaki gibi ayarlayarak gönderilmesi gerekmektedir.
HTTP_AUTHORIZATION="octoxlabs access_token"
Authentication yapısında octoxlabs adında custom token type kullanılıyor. Bu yapılan işlemleri "authentication.py" dosyası içerisinden görebilirsiniz. Access tokenin expire olması durumunda "{baseUrl}/api/refresh-token" urline request bodysini aşağıdaki gibi doldurulup gönderilmesi durumunda yeni access token elde edilir. Token süreleri config dosyasında yer almaktadır.
{
"refresh_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoyLCJleHAiOjE3MTM4Nzg0MzQsImlhdCI6MTcxMTI4NjQzNH0.9LFNJuqjvIZki6HcVC38TGp6wft_o3sQM0zcPzYaUyU"
}
Elasticsearch içerisinde arama yapmak için "{baseUrl}/api/search" urline istek atılır.Sorgularda büyük-küçük harf duyarlılığı vardır. Request bodysi aşağıdaki gibidir. Sorgulama da query içerisene ',' kullanılarak birden fazla sorugu yazılabilir şekilde ayarlandı.
{
"query": "subject = deneme*"
}
Tüm verileri yönetebilmek için djangonun admin paneli kullanılabilir.Admin paneline "{baseUrl}/admin" adresinden ulaşılabilir. Kullanıcı bilgileri:
Username: octoAdmin
Password: 159951
Apilerin testlerini yapmak için aşağıdaki komut terminale yazılmalıdır.
python manage.py test .
Management Command olarak tüm entry listesini güncel tarihe göre sıralayarak consola yazacak şekilde ayarlandı. Amacı elasticsearchte arama yapıldığında verilerin doğru gelip gelmediğini kontrol etmektir.
python manage.py listallentry
Quality tool olarak black kullanılmakatadır. Kodları yeniden formatlamak için aşağıdaki komut terminale yazılmalıdır.
black .