Nanoweb is a full asynchronous web server for micropython created in order to benefit from a correct ratio between memory size and features.
It is thus able to run on an ESP8266, ESP32, Raspberry Pico, etc...
- Completely asynchronous
- Declaration of routes via a dictionary or directly by decorator
- Management of static files (see assets_extensions)
- Callbacks functions when a new query or an error occurs
- Extraction of HTML headers
- User code dense and conci
- Routing wildcards
You just have to copy the nanoweb.py
file on the target (ESP32, Nano, etc...).
See the example.py file for an advanced example where you will be able to:
- Make a JSON response
- Use pages protected with credentials
- Upload file
- Use
DELETE
method - Read
POST
data
And this is a simpler example:
import uasyncio
from nanoweb import Nanoweb
naw = Nanoweb()
async def api_status(request):
"""API status endpoint"""
await request.write("HTTP/1.1 200 OK\r\n")
await request.write("Content-Type: application/json\r\n\r\n")
await request.write('{"status": "running"}')
# You can declare route from the Nanoweb routes dict...
naw.routes = {
'/api/status': api_status,
}
# ... or declare route directly from the Nanoweb route decorator
@naw.route("/ping")
async def ping(request):
await request.write("HTTP/1.1 200 OK\r\n\r\n")
await request.write("pong")
loop = asyncio.get_event_loop()
loop.create_task(naw.run())
loop.run_forever()
- Your code must respects
flake8
andisort
tools - Format your commits with
Commit Conventional
(https://www.conventionalcommits.org/en/v1.0.0/)