freeCodeCamp/guide/english/python/web-frameworks-and-what-the.../bottle/index.md

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.

  1. Use pip to install the bottle package.

    pip install bottle
    
  2. Create a html file to be served when loading the site. For example index.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>
    
  3. Create a new python file, example main.py.

  4. 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
    
  5. 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 to HTTP GET requests and pass in '/' as the path that the function will be invoked by.

    Next we define then index() function using the def 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()
    
  6. 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.

  7. 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)
    
  8. 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 in index.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+Snow

    Finally we return our greeting, appending the name entered in our form.

    @get('/hello')
    def hello():
        name = request.query['name']
        return f'Hello {name}'
    

Sources

https://bottlepy.org/docs/dev/