A very micro http framework.
Project description
A very micro HTTP framework.
Features
Very simple, less-code & fast
Using object dispatcher instead of regex route dispatcher.
Url-Encoded & Multipart form parsing.
No request or response objects are available, everything is combined in nanohttp.context.
Use -w/–watch to observe the changes in your project directory and reload the development server if desired.
A very flexible configuration system: pymlconf
Roadmap
The road map is to keep it simple. no built-in template engine and or ORM will be included.
Install
PyPI
$ pip install --pre nanohttp
Source
$ cd path/to/nanohttp
$ pip install -e .
Quick Start
demo.py
from os.path import dirname, abspath
from nanohttp import Controller, html, context, Static, HttpFound, settings
class Root(Controller):
static = Static(abspath(dirname(__file__)))
@html
def index(self):
yield '<html><head><title>nanohttp demo</title></head><body>'
yield '<h1>nanohttp demo page</h1>'
yield '<h2>debug flag is: %s</h2>' % settings.debug
yield '<img src="/static/cat.jpg" />'
yield '<ul>'
yield from ('<li><b>%s:</b> %s</li>' % i for i in context.environ.items())
yield '</ul>'
yield '</body></html>'
@html(methods=['post', 'put'])
def contact(self):
yield '<h1>Thanks: %s</h1>' % context.form['name'] if context.form else 'Please send a name.'
@html
def google(self):
raise HttpFound('http://google.com')
@html
def error(self):
raise Exception()
$ nanohttp demo
Or
from nanohttp import quickstart
quickstart(Root())
Are you need a WSGI application?
app = Root().load_app()
# Pass the ``app`` to every ``WSGI`` server you want.
Watch
$ pip install -r requirements-optional.txt
$ nanohttp -w
Config File
Create a demo.yaml file.
debug: false
Use the nanohttp.settings anywhere to access the config values.
from nanohttp import Controller, html, settings
class Root(Controller):
@html
def index(self):
yield '<html><head><title>nanohttp demo</title></head><body>'
yield '<h2>debug flag is: %s</h2>' % settings.debug
yield '</body></html>'
Passing the config file(s) using command line:
$ nanohttp -c demo.yaml [-c another.yaml] demo
Passing the config file(s) Using python:
from nanohttp import quickstart
quickstart(Root(), config_files=['file1', 'file2'])
Command Line Interface
$ nanohttp -h
usage: nanohttp [-h] [-c CONFIG_FILE] [-b {HOST:}PORT] [-d DIRECTORY] [-w]
[-V]
[MODULE{.py}{:CLASS}]
positional arguments:
MODULE{.py}{:CLASS} The python module and controller class to launch.
default: `nanohttp:Demo`, And the default value for
`:CLASS` is `:Root` if omitted.
optional arguments:
-h, --help show this help message and exit
-c CONFIG_FILE, --config-file CONFIG_FILE
Default: nanohttp.yaml
-b {HOST:}PORT, --bind {HOST:}PORT
Bind Address. default: 8080
-d DIRECTORY, --directory DIRECTORY
The path to search for the python module, which
contains the controller class. default is: `.`
-w, --watch If given, tries to watch the `--directory` and reload the app
on changes.
-V, --version Show the version.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.