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'}}
Example 3. Working with miniweb.ThreadingWSGIServer.
debugserver.py
from miniweb import ThreadingWSGIServer
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", "")
def main():
app = Application()
app.router.add_route("/ping", ping)
app.router.add_route("/echo", echo)
server = ThreadingWSGIServer(app)
server.serve_forever()
if __name__ == "__main__":
main()
Start debugserver with command python3 debugserver.py
, and then use ipython to do requests
In [1]: import requests
In [2]: requests.get('http://127.0.0.1:8000/ping').content
Out[2]: b'{"success": true, "result": "pong", "error": {"code": 0, "message": "OK"}}'
In [3]: requests.get('http://127.0.0.1:8000/echo?msg=hi').content
Out[3]: b'{"success": true, "result": "hi", "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.
v0.1.9
- Add LengthRequired exception handler.
- Add HttpChunkResponseData response data type and it's handler.
- Fixed the problem that caused errors when referencing http_request.POST data in GET requests.
v0.1.10
- Fix problem in python3.7.
v0.1.11
- Add ThreadingWSGIServer.
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.11.tar.gz
(14.3 kB
view details)
Built Distribution
miniweb-0.1.11-py3-none-any.whl
(14.4 kB
view details)
File details
Details for the file miniweb-0.1.11.tar.gz
.
File metadata
- Download URL: miniweb-0.1.11.tar.gz
- Upload date:
- Size: 14.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/32.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.8 tqdm/4.63.0 importlib-metadata/4.11.2 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.7.9
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 9c46014e6a925aacbda461970981ab8e03114184c8c37a1e8fbd75658efe98a0 |
|
MD5 | edfe4f515aeb89b5519dc4dfbdaa9d90 |
|
BLAKE2b-256 | 4df21b6a80804ae5c4a20f0c9d541597023daa24d97634235217c374b8bd9290 |
File details
Details for the file miniweb-0.1.11-py3-none-any.whl
.
File metadata
- Download URL: miniweb-0.1.11-py3-none-any.whl
- Upload date:
- Size: 14.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/32.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.8 tqdm/4.63.0 importlib-metadata/4.11.2 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.7.9
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | b7183209c748a323ba83ffb715777afc8dca6dfccdd426e605be586bd8aba02f |
|
MD5 | 126b429798e40abb6fd9ad49bd47c5d2 |
|
BLAKE2b-256 | 303fe3a6202e15e99935500749274e4b820b2452ad35318d55a0afe56cf58230 |