A simple web framework for Python.
Project description
miniweb
A simple web framework for Python.
Example 1. Working with gunicorn.
/path/to/your/project/debugserver.py
from miniweb import Application
from miniweb import simplejson_api
@simplejson_api
def ping(http_request, http_response):
return "pong"
@simplejson_api
def echo(http_request, http_response):
return http_request.GET.get("msg", "")
application = Application()
application.router.add_route("/ping", ping)
application.router.add_route("/echo", echo)
/path/to/your/project/wsgi.conf.py
bind = ["0.0.0.0:9132"]
workers = 4
threads = 32
daemon = True
errorlog = "logs/gunicorn.error.log"
keepalive = 300
timeout = 300
graceful_timeout = 300
loglevel = "info"
start.sh
#!/bin/bash
cd /path/to/your/project/
gunicorn --config=wsgi.conf.py --pidfile=/path/to/your/project/gunicorn.pid debugserver:application
After debugserver start, start ipython and do requests
In [14]: import requests
In [15]: requests.get('http://127.0.0.1:9132/ping').json()
Out[15]: {'success': True, 'result': 'pong', 'error': {'code': 0, 'message': 'OK'}}
In [16]: requests.get('http://127.0.0.1:9132/echo?msg=hello').json()
Out[16]: {'success': True, 'result': 'hello', 'error': {'code': 0, 'message': 'OK'}}
Example 2. Working with gevent.pywsgi.
/path/to/your/project/debugserver.py
- Server code is the same with the server code using gunicorn.
start.sh
#!/bin/bash
cd /path/to/your/project/
python -m gevent.pywsgi -b 0.0.0.0:9132 debugserver:application
After debugserver start, start ipython and do requests
In [14]: import requests
In [15]: requests.get('http://127.0.0.1:9132/ping').json()
Out[15]: {'success': True, 'result': 'pong', 'error': {'code': 0, 'message': 'OK'}}
In [16]: requests.get('http://127.0.0.1:9132/echo?msg=hello').json()
Out[16]: {'success': True, 'result': 'hello', 'error': {'code': 0, 'message': 'OK'}}
How to write a request handler?
def ping(http_request:HttpRequest, http_resposne:HttpResponse) -> None:
http_resposne.response("pong")
- A handle is a callable object and always takes two parameters: http_request and http_resposne.
- The parameter http_request holds all information about the request, e.g. META, GET, POST, COOKIES and FILES...
- The parameter http_resposne is used to handle all response things, e.g. status_code, response_content, response_headers, response_cookies...
- The handler returns nothing, and all things returned will be discarded, all response things should done by http_response methods.
What is SAPIs (Simple APIs)?
- miniweb.sapi decorators help you make a json or jsonp response easily.
- Instead of set response content by http_response methods, with miniweb.sapi you just returns response data from the handler function, and the SAPIs decorator will call http_response methods for your. For example:
# ################################################################### # Inside the handle we just returns the core result "pong", # but simplejson_api will do the result pack for you, # so that you get the final result: # { # "success": True, # "result": "pong", # "error": { # "code": 0, # "message": "OK", # } # } # ################################################################### @simplejson_api def ping(http_request:HttpRequest, http_resposne:HttpResponse): return "pong"
Releases
v0.1.5
- First release.
- Core dispatch and router dispatch are ready.
- HttpRequest and HttpResponse are ready.
- SimpleAPI decorators are eady.
@TODO:Done in v0.1.7.multipart/form-data
content type is NOT supported yet.
v0.1.6
- Fix HttpResponse init problem in core.dispatch.
- Use ensure_ascii=False while doing json.dumps in miniweb.sapi.
- Add HttpRequest.content_type and HttpRequest.content_length.
v0.1.7
- Handler PayloadTooLarge exception.
- Handler LengthRequired exception.
- Add
multipart/form-data
content type support. - Add file upload support.
v0.1.8
- Add response file support.
- Add miniweb.contrib.static_files utils.
- Add router name support.
- Add router reverse by the name support.
- Fix HttpRequest.update_post_data problem.
- Accept ALL request methods by default.
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.
Source Distribution
miniweb-0.1.8.tar.gz
(13.3 kB
view details)
Built Distribution
miniweb-0.1.8-py3-none-any.whl
(13.1 kB
view details)
File details
Details for the file miniweb-0.1.8.tar.gz
.
File metadata
- Download URL: miniweb-0.1.8.tar.gz
- Upload date:
- Size: 13.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.7.1 importlib_metadata/4.10.1 pkginfo/1.8.2 requests/2.27.1 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.10
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | a351ba9de82d63082aed8c6bdf162c2c8eca237674b20105c71cc864f6d78599 |
|
MD5 | 2e21183f7397d9f9aff5284b81587d3a |
|
BLAKE2b-256 | c5a44bcdd2ca6e84e10b843463849c49a7762d59225914ab40758d5bfb0407a9 |
File details
Details for the file miniweb-0.1.8-py3-none-any.whl
.
File metadata
- Download URL: miniweb-0.1.8-py3-none-any.whl
- Upload date:
- Size: 13.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.7.1 importlib_metadata/4.10.1 pkginfo/1.8.2 requests/2.27.1 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.10
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | d4a7de3a886230708019e6504e8472df66c6bcc4d83e6523fcdb1a0620dbb7ed |
|
MD5 | fd221b018e4a699cdb4c7f717faa731e |
|
BLAKE2b-256 | 4964bcc132a20e4f1b2227914b2713f919fd36ce8091c22e8e61a6657731b2c4 |