RkBlog

Hardware, programming and astronomy tutorials and reviews.

Wyszukiwarka google w django

Wykorzystanie modułu Pythona web_search do stworzenia prostej aplikacji Django wyszukującej danych poprzez wyszukiwarkę Google.

Naszym celem będzie zrobienie prostej wyszukiwarki google w Django.

- Pobieramy plik web_search.py.
- Tworzymy nowy projekt django o nazwie "google":
django-admin.py startproject google
- Tworzymy nową aplikacje o nazwie "searchengine":
python manage.py startapp searchengine
- Plik web_search.py umieszczamy w katalogu searchengine
- Tworzymy w głównym katalogu projektu katalog templates
- Edytujemy settings.py i TEMPLATES_DIR ustawiamy na:
TEMPLATE_DIRS = (
    'templates/'
)
- Uruchamiamy serwer testowy:
python manage.py runserver 8080


Mamy przygotowane Django pod naszą wyszukiwarkę, tzn możemy zabrać się za widok i szablon. W katalogu templates/ tworzymy plik search.html o kodzie:
<form action="/" method="post">
<input type="text" name="term" size="30"> <input type="submit" value="Search">
</form>
Zwykły kod formularza wysyłającego dane na stronę główną.

- Edytujemy searchengine/views.py do postaci:
from django.shortcuts import render_to_response
from django.http import Http404, HttpResponse, HttpResponseRedirect

def search(request):

    if request.POST:
	print request.POST['term']
	return HttpResponseRedirect("/")
    else:
	return render_to_response('search.html')
Mamy tutaj prosty widok search. Podłączamy go edytując urls.py do postaci:
from django.conf.urls.defaults import *

urlpatterns = patterns('',
(r'^/?$', 'google.searchengine.views.search'),
)
Obecnie po wejściu na główną stronę zobaczymy formularz. Gdy coś wpiszemy i wyślemy - zostaniemy przekierowani na stronę główną (HttpResponseRedirect) a w konsoli w której mamy uruchomiony serwer zobaczymy podaną przez nas frazę.

web_search.py działa bardzo prosto, oto przykład:
from web_search import google
for (name, url, desc) in google('fraza', 20):
	print name, url
Musimy wykorzystać frazę i przekazać wynik do szablonu.
Widok modyfikujemy do postaci:
from django.shortcuts import render_to_response
from django.http import Http404, HttpResponse, HttpResponseRedirect
from google.searchengine.web_search import google

def search(request):

    if request.POST:
	return render_to_response('search.html', {'result': google(request.POST['term'], 10)})
	#return HttpResponseRedirect("/")
    else:
	return render_to_response('search.html')
Dodaliśmy ładowanie web_search (from Projekt.Aplikacja.web_search import google) oraz zamiast przekierowania wysłamy szablon search.html ze zmienną result zawierającą wyniki wyszukiwania. Szablon modyfikujemy do postaci:
<form action="/" method="post">
<input type="text" name="term" size="30"> <input type="submit" value="Search">
</form><hr>
{% if result %}
	{% for res in result %}
	<li>{{ res }}</li>
	{% endfor %}
{% endif %}
Mamy tag if zmienna, który zostanie spełniony jeżeli zmienna będzie istniała (tj. w naszym przypadku jeżeli formularz został wysłany i mamy wyniki z google). Następnie mamy for, który listuje wyniki. Po wpisaniu jakiejś frazy zobaczymy wyniki ale w postaci listy:
('Wine Development HQ', 'http://www.winehq.com/', 'Wine is a free implementation of Windows on Unix. WineHQ is a collection of resources for Wine developers and users.')
Element 0 - nazwa strony, element 1 - URL strony, element 2 - opis strony. A więc zmieniamy pętlę for na:
{% for res in result %}
	<a href="{{ res.1 }}"><b>{{ res.0 }}</b></a><br />
	{{ res.2 }}<br /><br />
{% endfor %}
I gotowe
RkBlog

Django, 14 July 2008,

Comment article