Erstellen der Indexseite
Die Indexseite unserer Website wird Benutzern ermöglichen, eine URL einzugeben, die verkürzt werden soll. Sie wird auch die verkürzte URL anzeigen, sobald sie generiert wurde. Der HTML-Code für diese Seite befindet sich in templates/index.html
.
Zuerst müssen wir das Template base.html
erweitern und ein Formular erstellen, mit dem Benutzer ihre URLs einreichen können:
{% extends "base.html" %} {% block content %}
<div class="text-center">
<h1 class="text-3xl font-bold text-gray-900 mb-8">Verkürze deine URL</h1>
<form action="/" method="POST" class="w-full max-w-sm mx-auto">
<div
class="flex items-center border-2 border-blue-500 rounded overflow-hidden"
>
<input
type="text"
name="original_url"
placeholder="URL eingeben"
class="appearance-none bg-transparent border-none w-full text-gray-700 py-2 px-4 leading-tight focus:outline-none"
/>
<button
type="submit"
class="bg-blue-500 hover:bg-blue-700 text-white py-2 px-4 rounded-r focus:outline-none"
>
Verkürzen
</button>
</div>
</form>
{% if short_url %}
<div class="mt-4">
<p class="text-lg text-gray-700">
Verkürzte URL:
<a href="{{ request.host_url }}{{ short_url }}" class="text-blue-500"
>{{ request.host_url }}{{ short_url }}</a
>
</p>
</div>
{% endif %}
</div>
{% endblock %}
In index.html
haben wir ein Formular mit einem einzelnen Eingabefeld, in dem Benutzer ihre URL eingeben können. Das Formular wird an die gleiche Seite gesendet, daher legen wir das action
-Attribut auf /
fest. Wir legen auch das method
-Attribut auf POST
fest, damit die Formulardaten im Anfragekörper gesendet werden.
Jetzt müssen wir templates/base.html
hinzufügen:
<!doctype html>
<html>
<head>
<title>URL-Kürzer</title>
<link
href="https://cdn.jsdelivr.net/npm/tailwindcss@2.2.19/dist/tailwind.min.css"
rel="stylesheet"
/>
</head>
<body>
<nav class="p-6 bg-white flex justify-between items-center">
<a href="/" class="text-2xl font-bold text-gray-900">URL-Kürzer</a>
<div>
<a href="/" class="text-gray-800 mr-6">Startseite</a>
<a href="/history" class="text-gray-800">Verlauf</a>
</div>
</nav>
<main class="container mx-auto max-w-xl pt-8 min-h-screen">
{% block content %} {% endblock %}
</main>
</body>
</html>
In base.html
haben wir eine Navigationsleiste oben auf der Seite mit Links zur Startseite und zur Verlaufsseite. Wir haben auch ein main
-Element, das den Inhalt jeder Seite enthalten wird. Der content
-Block ist der Ort, an dem der Inhalt jeder Seite eingefügt wird.
Wir müssen auch den erforderlichen Code in app.py
hinzufügen, um Formulareingaben zu verarbeiten und die verkürzte URL zu generieren:
@app.route("/", methods=["GET", "POST"])
def index():
if request.method == "POST":
original_url = request.form["original_url"]
short_url = generate_short_url()
## Füge die ursprüngliche und die verkürzte URL in die Datenbank ein
db.execute(
"INSERT INTO urls (original_url, short_url) VALUES (?,?)",
(original_url, short_url),
)
conn.commit()
return render_template("index.html", short_url=short_url)
return render_template("index.html")
In index()
überprüfen wir, ob die Anfrage-Methode POST
ist. Wenn ja, erhalten wir die ursprüngliche URL aus den Formulardaten und generieren eine verkürzte URL. Wir fügen dann die ursprüngliche und die verkürzte URL in die Datenbank ein und rendern das index.html
-Template mit der verkürzten URL.