66 lines
1.7 KiB
Markdown
66 lines
1.7 KiB
Markdown
# Nanoweb
|
|
|
|
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...
|
|
|
|
## Features
|
|
|
|
* 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
|
|
|
|
## Installation
|
|
|
|
You just have to copy the `nanoweb.py` file on the target (ESP32, Nano, etc...).
|
|
|
|
## Use
|
|
|
|
See the [example.py](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:
|
|
|
|
```Python
|
|
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 = uasyncio.get_event_loop()
|
|
loop.create_task(naw.run())
|
|
loop.run_forever()
|
|
```
|
|
|
|
## Contribute
|
|
|
|
* Your code must respects `flake8` and `isort` tools
|
|
* Format your commits with `Commit Conventional` (https://www.conventionalcommits.org/en/v1.0.0/)
|