2.9 KiB
title
| 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
pipto install the bottle package.pip install bottle -
Create a
htmlfile 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
@getdecorator, which specifies this function should respond toHTTP GETrequests and pass in'/'as the path that the function will be invoked by.Next we define then
index()function using thedefkeyword.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
returnstatement.@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
runfunction 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 404error though as we have not yet defined the function to respond to this request.run(host='localhost', port=8080) -
Back in our
main.pyfile we now need to define the function to respond when sumbitting our form.Again we use the
@getdecorator 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
namevalue 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}'