Hier ein möglicher technischer Ablauf einer Sucheingabe nach einer Serie:
- (1)
- Der Benutzer gibt im Browser im Suchfeld den Begriff «lost» ein.
- Durch das html-Formular wird die URL
/search
aufgerufen und der eingegebene Begriff mit dem Namenq
als Query-String an die URL angehängt. - (2)
- Der Webserver (Bottle) extrahiert in der Route
search
den Querystringq
und erhält so den Suchbegriff als Python-Variable. - (3)
- Der Webserver liefert die Zugriffsdaten an
mysql.connector
um eine Verbindung zur DB aufzubauen. - (4)
mysql.connector
überprüft, ob die DB besteht und Zugriff erlaubt ist.- (5)
- Zugriff ist erlaubt
- (6)
- Der Webserver erhält ein gültiges Datenbank-Objekt und kann darauf eine «cursor» erzeugen.
- (7)
- Der Webserver baut aus der Sucheingabe (in einer Variablen) und einem festen Teil ein SQL-Select als String vor.
- z.B.
SELECT * from movies WHERE TITLE LIKE %lost%
- (8)
- über die MySQL-Verbindung kann mit
execute
nun das SQL-Select-Statement an die DB geschickt werden. - (9)
- Das MySQL-Module schickt die Anfrage an die eigentliche DB weiter.
- (10)
- Die DB liefert die Ergebnisse ans MySQL-Modul zurück.
- (11)
- Die Ergebnisse werden z.B. mit
fetchall()
– je nach Cursor-Typ – umgewandelt in einen von Python lesbaren Datentyp. - (12)
- Die Ergebnisse können mit Python bearbeitet und z.B. mit
template
in HTML-Code umgewandelt werden. - (13)
- Bottle schickt den generierten HTML-Code mit dem
return
der Route zurück an den Browser des Benutzers.
py
from bottle import request, route, run, template
import mysql.connector
@route('/')
def index():
return template("index.html")
@route('/search')
def search():
query = request.query.decode()
sql = "SELECT * FROM movies WHERE name LIKE '%" + query.q + "%' LIMIT 10"
print(sql)
mydb = mysql.connector.connect(
host="web3.kinet.ch",
user="omdb_user",
database="omdb",
password="QhPSNctsBRgsYOKEbASI"
)
mycursor = mydb.cursor(named_tuple=True)
mycursor.execute(sql)
myresult = mycursor.fetchall()
mydb.close()
return template("search.html", movies=myresult)
run(reloader=True, host='localhost', port=8080)
html
<html>
<head></head>
<body>
<form action="/search">
<input type="text" name="q" />
<button submit>Suche</button>
</form>
</body>
</html>
html
<html>
<head></head>
<body>
<ul>
% for movie in movies:
<li>
<a href="/movie/{{movie.id}}">
{{movie.name}} ({{movie.date}})
</a>
</li>
% end
</ul>
</body>
</html>