Django ve Url Düzeltme
Internet tarayıcısına elle url girenler, url'leri yanlış yazmalarından dolayı gördükleri 404 sayfalarını hatırlayacaktır. Bu 404 sayfaları sinir bozucudur. Özellikle de ziyaretçiye kolaylık sağlayan bir özellikleri yoksa. 404 sayfaları, ziyaretçiye site haritası sunarak, ya da ziyaretçiye bazı önerilerde bulunarak ziyaretçiye kolaylık sağlayabilir. Ancak, 404 sayfasını atlayıp, ziyaretçiyi gerçekten gitmek istediği sayfaya yönlendirmek en doğrusu olacaktır.
Ziyaretçileriniz gerçekten nereye gitmek istediklerini anlamak için, bir yazım düzeltme algoritması'na ihtiyaç duyacaksınız. Ben, verdiğim bağlantıdaki algoritmanın, biraz basitleştirilmiş bir halini kullanacağım.
ilk satırda tanımladığımız, alphabet karakter dizisindeki her karakter, yanlış kelimedeki eksik karakteri doldurmak için veya yanlış karakterleri değiştirmek için kullanılacak. 3. satırda, tanımladığım fonksiyon, 2 argüman alıyor. İlk argümanı, düzeltilmek istenen karakter dizisi, diğeri ise, tüm düzgün kabul edilen karakter dizilerini içinde barındıran bir liste. 4. satırda, splits listesi tanımlanarak, verilen kelimenin tüm ikiye bölünme ihtimalleri bu listede toplanıyor. Örneğin:
|
a = "yasar"
|
|
def splits(word):
|
|
return [(word[:i], word[i:]) for i in range(len(word) + 1)]
|
|
print(splits(a))
|
|
# [("","yasar"),("y","asar")...,("yasar","")] gibi bir liste döndürür.
|
Daha sonra tanımlanan deletes listesi, verilen kelimenin bir harfi eksik tüm farklı şekillerini içinde barındırıyor. Bunu yapmak için, bir önceki satırda tanımladığımız splits listesinin içindeki her ikiliden ikincisinin ilk karakterini siliyor. Daha sonra tanımladığımız transposes listesi ise, yanyana harf değişimlerinin tüm çeşitlerini içinde barındırıyor. Son olarak da, inserts isminde bir liste oluşturup, bu listeye verilen kelimenin mümkün olan her yerine, alphabet içerisinden her harfin bir kez eklendiği bütün versiyonlarını tutuyor. Örneğin, "yasar" kelimesi verildiğin, kelimenin başı ve sonu ilk y ile a arası, gibi toplamda 6 tane harf eklenebilecek yer var. alphabet karakter dizisinde 37 karakter olduğu için, insert listesi 6x37 = 222 kelimeden oluşacak. Daha sonra, tüm bu hesaplanan doğru kelime adaylarını, tek bir listede birleştiriyoruz. Son olarak, hesapladığımız önerilerden, kabul edilebilir kelimeler listesinde olanları bir liste olarak döndürüyoruz.
Url düzeltmeyi gerçekleştirebilmek için, url içerisinde veya dekoratörleri içerisinde get_object_or_404 gibi standart 404 sayfası gösterilmesine neden olacak fonskiyonların etkisini dikkate almak gerekiyor. Eğer, url düzeltme mekanizmanız çalışmadan, başka bir yerde Http404 hatası verilirse, url düzeltme algoritmanız işe yaramayacaktır. Örnek bir görünüm fonksiyonu şöyle olabilir.
Yukarıdaki örnek için gerekli açıklamaları, yorumlarla birlikte yaptım. Her ne kadar, burada bahsedilen algoritma çok profesyonel, yada hız canavarı bir algoritma olmasa da, çoğu durumda işinizi görecektir. Eğer hala başlamadıysanız, tarayıcınızın url çubuğuyla oynamaya başlayabilirsiniz. Son olarak bir tane de öldülsüz zeka sorusu, bu sayfaya ulaşmak için yukarı örneği verilen algoritma kullanıldığına göre, kaç farklı adres bu sayfaya yönlendirilir?