2.9 KiB
title |
---|
Bottle |
The bottle framework allows us to very quickly and easily get up and running with a basic web application.
The following details how to write and run a simple greeting web app where we can enter our name in a form, press submit and get back a greeting.
-
Use
pip
to install the bottle package.pip install bottle
-
Create a
html
file to be served when loading the site. For exampleindex.html
.Let's add a heading and a basic form to this page.
<h3>Say Hello</h3> <form action="/hello" method="get"> Name: <input type="text" name="name"><br><br> <input type="submit"> </form>
-
Create a new python file, example
main.py
. -
In the first line of the file we need to import get, request, and run functions from the bottle module.
from bottle import get, request, run
-
Now we define our function to serve our html file when the root page is accessed.
Here we use the
@get
decorator, which specifies this function should respond toHTTP GET
requests and pass in'/'
as the path that the function will be invoked by.Next we define then
index()
function using thedef
keyword.To read and return the html file we created in step 2, we use what is called a context manager. This handles opening and closing the file for us, allowing us to read the files and contents and return them with the
return
statement.@get('/') def index(): with open('./index.html') as f: return f.read()
-
To get the site to run and listen for requests we need to add a call to the bottle frameworks
run
function as follows.Here we pass in the host that the web application will run on, in this case
localhost
, and the port that it should listen for HTTP requests. -
Run the application and load it up in your browser http://localhost:8080/, you should see the html file we created eariler rendered in the browser.
If we enter our name and press submit now we will get a
HTTP 404
error though as we have not yet defined the function to respond to this request.run(host='localhost', port=8080)
-
Back in our
main.py
file we now need to define the function to respond when sumbitting our form.Again we use the
@get
decorator here, however this time we pass in'/.hello'
as the path. You may notice that this is the same path that we defined in the action attribute of our form inindex.html
.Next we retrieve the
name
value from the url, when submitting the form the form data is url encoded like this http://localhost:8080/hello?name=Jon+SnowFinally we return our greeting, appending the name entered in our form.
@get('/hello') def hello(): name = request.query['name'] return f'Hello {name}'