Django ile metin arama örnegi

Yorum bırakın

12/10/2013 tarafından electrocoder

      Django ile geliştirdiğimiz web sitelerinde arama metodunu kullanmak için önerebileceğim bir yöntemden bahsedeceğim. Arama fonksiyonu yazmak genellikle aynı şablonu kullansakda çok sıklıkla kullandığımız bir işlemdir. Kullanıcının girdiği kelimenin body, title ve tag’ lar içerisinde aranması önemlidir.
      Arama örneğini Google Chrome üzerinden bir örnek ile anlatmak yanlış olmaz sanırım:
      Chrome ile açılan ve içerisindeki arama kutusu kullanılarak arama işlemi yapılan bir site Chrome tarafından indexlenmekte ve bir sonraki adres çubuğu aramalarında bu string kullanılmakta. Bunu biraz daha açıklayalım.
      Chrome içerisinde bir web adresi yazdığımızda sağ tarafta ‘Tab’ resmi belirir. Bu işlem ile google’ ın aradığımız site içerisinde arama yapmasını sağlarız.

barkood-search

      Site adresinden sonra Tab ile girildiğinde “Search barkood.com:” yazısı belirir. Bu noktadan sonra girilen kelime site içerisinde google tarafından aranır.

barkood-search-text.png

      Şimdi diyeceksiniz ki biz bunu bilmiyormuyduk. Tabiiki biliyorsunuzdur ve kullanıyorsunuzdur ama benim bu örneği vermemdeki amaç google ın arama stringine dikkat çekmekti.
      Google site içerisinde arama yaparken barkood.com sitesi için “http://barkood.com/search/?q=869” stringini kullandı. Biz de Django’ daki url yapımız ile belirlemiştik zaten. Aramamızı bu şekilde düzenlersek google aramalarını kaçırmamış oluruz.
      Tab arama örneğini çeşitli adresler üzerinde denediğimde başarılı olan adresler şunlardır.
      Tab araması çalışmayan adresler:
      görüldüğü gibi ziyaretçinin hızlı bir biçimde cevap alabilmesi için arama yapısı çok önemlidir.
      Buraya kadar Google Chrome arama kılavuzu anlatılmış olsa da, makalenin bundan sonrası Django ve arama metodu üzerine olacaktır.
      Django ile metin arama için aşağıdaki gibi bir modelimiz olsun;

models.py

class Post(models.Model):
    """
        Post sinifi kayitli olan makaleleri tutar. 
    """
    tag = models.CharField(max_length=20)
    body = models.CharField(max_length=100)
    title = models.CharField(max_length=100)
    objects = PostManager()
      Bu modelimizde kullanılmak üzere birde

PostManager

       sınıfımız olsun.

models.py

class PostManager(models.Manager):
    """Arama metodunu gerçekleştirecek modelimiz.
    """
    def search(self, query=None):
        posts = super(PostManager, self).get_query_set().order_by('-pub_date')
        if query is not None:
            posts = search.get_results(posts, query, ['tag', 'body', 'title'])
        return posts
      Modelimizi oluşturma işlemi bittiğine göre şimdide Views yapısını oluşturalım.

views.py

def search(request):
    """
        Post içerisindeki veri alinir
        Kullanimi:http://127.0.0.1:8000/search/?q=python
    """
    query = request.GET.get('q', '')
    relational = ""
    if query:
        post_list = Post.objects.search(query=query)
        post_count = "Toplam %s ürün bulundu." % len(post_list)
        relational = "İlişkili ürün isimleri bulundu."
        for i in post_list:
            i.view_count = i.view_count + 1
            i.save()
    else:
        post_list=[]
        post_count = ""
    return render_to_response('posts/search.html', {'post_list' : post_list, 'relational' : relational, 'post_count' : post_count})
      View metodunda

request.GET.get

       ile sorgu sözcüğü alindi ve Post içerisinde aratıldı. Veritabanında bulunan datalar ‘post_list’ değişkeni ile dışarı taşındı.
      View metodunu url ye şu şekilde bağlıyabiliriz.

urls.py

url(r'^search/$', 'posts.views.search')
      Django ile oluşturduğumuz model-view örneğini localhost üzerinde çalıştırıp sonucu kendinizde deneyebilirsiniz.
Reklamlar

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Google+ fotoğrafı

Google+ hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Connecting to %s

%d blogcu bunu beğendi: