Top Related Projects
The Python micro framework for building web applications.
The Web framework for perfectionists with deadlines.
FastAPI framework, high performance, easy to learn, fast to code, ready for production
Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed.
CherryPy is a pythonic, object-oriented HTTP framework. https://cherrypy.dev
Pyramid - A Python web framework
Quick Overview
Bottle is a lightweight, single-file Python web framework. It is designed to be simple, fast, and easy to use, making it ideal for small web applications and prototypes. Bottle has no dependencies other than the Python Standard Library.
Pros
- Simple and easy to learn, with minimal boilerplate code
- Single-file module, making it easy to deploy and distribute
- No external dependencies, reducing potential conflicts and simplifying installation
- Suitable for small to medium-sized web applications and rapid prototyping
Cons
- Limited built-in features compared to larger frameworks like Django or Flask
- May not scale well for large, complex applications
- Smaller community and ecosystem compared to more popular frameworks
- Less suitable for projects requiring advanced features like ORM or admin interfaces
Code Examples
- Basic route and response:
from bottle import route, run
@route('/hello/<name>')
def hello(name):
return f'Hello, {name}!'
run(host='localhost', port=8080)
- Handling form data:
from bottle import route, request, run
@route('/login', method='POST')
def login():
username = request.forms.get('username')
password = request.forms.get('password')
return f"Login attempt: {username} / {password}"
run(host='localhost', port=8080)
- Serving static files:
from bottle import route, static_file, run
@route('/static/<filename:path>')
def serve_static(filename):
return static_file(filename, root='./static')
run(host='localhost', port=8080)
Getting Started
To get started with Bottle, follow these steps:
- Install Bottle:
pip install bottle
- Create a new Python file (e.g.,
app.py
) and add the following code:
from bottle import route, run
@route('/')
def hello():
return "Hello, World!"
run(host='localhost', port=8080)
- Run the application:
python app.py
- Open a web browser and navigate to
http://localhost:8080
to see your first Bottle application in action.
Competitor Comparisons
The Python micro framework for building web applications.
Pros of Flask
- More extensive ecosystem with a wide range of extensions
- Better suited for larger, more complex applications
- Stronger community support and more frequent updates
Cons of Flask
- Slightly steeper learning curve for beginners
- More dependencies and potentially slower startup time
- Requires more configuration for simple applications
Code Comparison
Flask:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
return "Hello, World!"
Bottle:
from bottle import route, run
@route('/')
def hello():
return "Hello, World!"
run(host='localhost', port=8080)
Both Flask and Bottle are lightweight Python web frameworks, but Flask offers more flexibility and features for larger projects. Bottle is simpler and has no dependencies, making it ideal for small applications or learning purposes. Flask's modular design allows for easy integration of extensions, while Bottle's single-file approach keeps things minimal. Flask's routing is more powerful, supporting various HTTP methods and URL parameters more easily. Bottle's performance can be slightly better for simple tasks due to its minimalistic nature. Ultimately, the choice between Flask and Bottle depends on the project's complexity and the developer's preferences.
The Web framework for perfectionists with deadlines.
Pros of Django
- More comprehensive framework with built-in admin interface, ORM, and authentication system
- Larger ecosystem with extensive third-party packages and plugins
- Better suited for large, complex applications with multiple developers
Cons of Django
- Steeper learning curve due to its larger codebase and more complex architecture
- Heavier and potentially slower for simple applications or microservices
- More opinionated, which can limit flexibility in some cases
Code Comparison
Django:
from django.http import HttpResponse
from django.urls import path
def hello(request):
return HttpResponse("Hello, World!")
urlpatterns = [
path('hello/', hello),
]
Bottle:
from bottle import route, run
@route('/hello')
def hello():
return "Hello, World!"
run(host='localhost', port=8080)
Both frameworks allow for easy routing and handling of HTTP requests, but Django requires more boilerplate code and configuration. Bottle's simplicity is evident in its more concise syntax and built-in development server. However, Django's structure provides better organization for larger projects and includes additional features out of the box.
FastAPI framework, high performance, easy to learn, fast to code, ready for production
Pros of FastAPI
- Built-in support for asynchronous programming
- Automatic API documentation with Swagger UI and ReDoc
- Type hints and data validation using Pydantic models
Cons of FastAPI
- Steeper learning curve for beginners
- Larger dependency footprint (requires Starlette and Pydantic)
- Potentially slower for simple applications due to additional features
Code Comparison
FastAPI:
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
async def root():
return {"message": "Hello World"}
Bottle:
from bottle import Bottle, run
app = Bottle()
@app.route('/')
def hello():
return {"message": "Hello World"}
run(app, host='localhost', port=8080)
Summary
FastAPI offers more advanced features and better support for modern Python practices, while Bottle remains a lightweight and simple option. FastAPI excels in larger, more complex projects, whereas Bottle may be preferable for smaller, straightforward applications. The choice between the two depends on project requirements, developer experience, and performance needs.
Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed.
Pros of Tornado
- Asynchronous networking library, ideal for handling many concurrent connections
- Built-in support for WebSockets and long polling
- More comprehensive feature set, including authentication and templating
Cons of Tornado
- Steeper learning curve due to its asynchronous nature
- Heavier and more complex than Bottle
- May be overkill for simple web applications
Code Comparison
Tornado:
import tornado.ioloop
import tornado.web
class MainHandler(tornado.web.RequestHandler):
def get(self):
self.write("Hello, World!")
if __name__ == "__main__":
application = tornado.web.Application([
(r"/", MainHandler),
])
application.listen(8888)
tornado.ioloop.IOLoop.current().start()
Bottle:
from bottle import route, run
@route('/')
def hello():
return "Hello World!"
run(host='localhost', port=8080)
Tornado's code is more verbose but offers greater flexibility for complex applications. Bottle's syntax is simpler and more straightforward, making it easier for beginners or small projects. Tornado's asynchronous nature is evident in its code structure, while Bottle's routing is more concise.
CherryPy is a pythonic, object-oriented HTTP framework. https://cherrypy.dev
Pros of CherryPy
- More feature-rich and full-featured web framework
- Built-in tools for sessions, authentication, caching, etc.
- Better suited for larger, more complex web applications
Cons of CherryPy
- Steeper learning curve compared to Bottle's simplicity
- More dependencies and overhead
- Can be overkill for small, simple projects
Code Comparison
Bottle example:
from bottle import route, run
@route('/hello/<name>')
def index(name):
return f'Hello {name}!'
run(host='localhost', port=8080)
CherryPy example:
import cherrypy
class HelloWorld:
@cherrypy.expose
def index(self, name):
return f'Hello {name}!'
cherrypy.quickstart(HelloWorld())
Both frameworks offer simple routing and request handling, but CherryPy uses a class-based approach while Bottle uses function decorators. CherryPy provides more built-in functionality out of the box, while Bottle aims for simplicity and minimal dependencies. Choose Bottle for lightweight, single-file applications, and CherryPy for more complex projects requiring additional features and scalability.
Pyramid - A Python web framework
Pros of Pyramid
- More comprehensive and feature-rich framework
- Better suited for large, complex applications
- Extensive documentation and community support
Cons of Pyramid
- Steeper learning curve
- Heavier and more complex setup
- Potentially overkill for small projects
Code Comparison
Bottle:
from bottle import route, run
@route('/hello/<name>')
def index(name):
return f'Hello {name}!'
run(host='localhost', port=8080)
Pyramid:
from wsgiref.simple_server import make_server
from pyramid.config import Configurator
from pyramid.response import Response
def hello_world(request):
return Response('Hello World!')
if __name__ == '__main__':
with Configurator() as config:
config.add_route('hello', '/')
config.add_view(hello_world, route_name='hello')
app = config.make_wsgi_app()
server = make_server('0.0.0.0', 6543, app)
server.serve_forever()
Bottle is a lightweight, single-file module with a simple syntax, making it ideal for small projects and quick prototyping. Pyramid, on the other hand, offers a more structured approach with built-in features like authentication and database integration, making it suitable for larger, more complex applications. While Bottle's simplicity allows for rapid development, Pyramid's extensibility and scalability make it a better choice for long-term, enterprise-level projects.
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual CopilotREADME
.. image:: http://bottlepy.org/docs/dev/_static/logo_nav.png :target: http://bottlepy.org/ :alt: Bottle Logo :align: right
.. image:: https://github.com/bottlepy/bottle/workflows/Tests/badge.svg :target: https://github.com/bottlepy/bottle/workflows/Tests :alt: Tests Status
.. image:: https://img.shields.io/pypi/v/bottle.svg :target: https://pypi.python.org/pypi/bottle/ :alt: Latest Version
.. image:: https://img.shields.io/pypi/l/bottle.svg :target: https://pypi.python.org/pypi/bottle/ :alt: License
.. _Python: https://python.org/ .. _mako: https://www.makotemplates.org/ .. _cheetah: https://www.cheetahtemplate.org/ .. _jinja2: https://jinja.palletsprojects.com/
.. _WSGI: https://peps.python.org/pep-3333/ .. _gunicorn: https://gunicorn.org/ .. _paste: https://pythonpaste.readthedocs.io/ .. _cheroot: https://cheroot.cherrypy.dev/
============================ Bottle: Python Web Framework
Bottle is a fast, simple and lightweight WSGI_ micro web-framework for Python_. It is distributed as a single file module and has no dependencies other than the Python Standard Library <http://docs.python.org/library/>
_.
- Routing: Requests to function-call mapping with support for clean and dynamic URLs.
- Templates: Fast
built-in template engine <http://bottlepy.org/docs/dev/tutorial.html#tutorial-templates>
_ and support for mako_, jinja2_ and cheetah_ templates. - Utilities: Convenient access to form data, file uploads, cookies, headers and other HTTP features.
- Server: Built-in development server and ready-to-use adapters for a wide range of WSGI_ capable HTTP server (e.g. gunicorn_, paste_ or cheroot_).
Homepage and documentation: http://bottlepy.org
Example: "Hello World" in a bottle
.. code-block:: python
from bottle import route, run, template
@route('/hello/
run(host='localhost', port=8080)
Run this script or paste it into a Python console, then point your browser to <http://localhost:8080/hello/world>
_. That's it.
Download and Install
.. __: https://github.com/bottlepy/bottle/raw/master/bottle.py
Install the latest stable release with pip install bottle
or download bottle.py
__ (unstable) into your project directory. There are no hard dependencies other than the Python standard library.
License
.. __: https://github.com/bottlepy/bottle/raw/master/LICENSE
Code and documentation are available according to the MIT License (see LICENSE__).
The Bottle logo however is NOT covered by that license. It is allowed to use the logo as a link to the bottle homepage or in direct context with the unmodified library. In all other cases, please ask first.
Top Related Projects
The Python micro framework for building web applications.
The Web framework for perfectionists with deadlines.
FastAPI framework, high performance, easy to learn, fast to code, ready for production
Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed.
CherryPy is a pythonic, object-oriented HTTP framework. https://cherrypy.dev
Pyramid - A Python web framework
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual Copilot