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:
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.
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.6.tar.gz
(10.6 kB
view details)
Built Distribution
miniweb-0.1.6-py3-none-any.whl
(10.4 kB
view details)
File details
Details for the file miniweb-0.1.6.tar.gz
.
File metadata
- Download URL: miniweb-0.1.6.tar.gz
- Upload date:
- Size: 10.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.6.0 importlib_metadata/4.8.2 pkginfo/1.8.1 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.10
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | cd659f537676643349eae38c3ad2e6cd5d2654a8a275149a071febbb2bbebec7 |
|
MD5 | ba8b12458a063443bbdeed6e03ad1f47 |
|
BLAKE2b-256 | 1490fb7a898fe87eb4e530c40dcb81aab81dc83d00c7128d4484599e57e7e574 |
File details
Details for the file miniweb-0.1.6-py3-none-any.whl
.
File metadata
- Download URL: miniweb-0.1.6-py3-none-any.whl
- Upload date:
- Size: 10.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.6.0 importlib_metadata/4.8.2 pkginfo/1.8.1 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.10
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | f702db7f3cb0f94ad4363cf8118b87bc5f9d146ace7516ed6366c42a15382774 |
|
MD5 | 065209fbf957b809bb729c4c354819c5 |
|
BLAKE2b-256 | 31325fe4833251379236f1588de57e898952e663b764d5ef5b54107daf0e6ec5 |