https://github.com/izzatkarimov/pyframekit
PyFrameKit - Python Web Framework built for learning purposes
https://github.com/izzatkarimov/pyframekit
framework python
Last synced: about 2 months ago
JSON representation
PyFrameKit - Python Web Framework built for learning purposes
- Host: GitHub
- URL: https://github.com/izzatkarimov/pyframekit
- Owner: izzatkarimov
- Created: 2025-01-08T22:04:53.000Z (about 1 year ago)
- Default Branch: main
- Last Pushed: 2025-01-21T12:06:05.000Z (about 1 year ago)
- Last Synced: 2025-12-06T00:48:34.116Z (4 months ago)
- Topics: framework, python
- Language: Python
- Homepage: https://pypi.org/project/pyframekit
- Size: 12.5 MB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# PyFrameKit



PyFrameKit is a lightweight Python web framework built for learning. It's WSGI-compliant and can be used with servers like Gunicorn.
## Installation
To install PyFrameKit, use pip:
```
pip install pyframekit
```
## Hot to Use
### Quick Start Example
Here's how you can createa a basic PyFrameKit application:
```
from pyframekit.app import PyFrameKitApp
app = PyFrameKitApp()
@app.route("/home")
def home(request, response):
response.text = "Hello! This is the Home Page"
@app.route("/hello/{name}")
def greeting(request, response, name):
response.text = f"Hello {name}"
@app.route("/books")
class Books:
def get(self, request, response):
response.text = "Book Page"
def post(self, request, response):
response.text = "Endpoint to create a book"
```
### Advanced Features
#### Template Rendering
PyFrameKit supports template rendering for dynamic HTML content:
```
@app.route("/template")
def template_handler(req, resp):
resp.html = app.template(
"home.html",
context={"new_title": "New Title", "new_body": "New Body"}
)
```
#### JSON Response
Easily handle JSON data:
```
@app.route("/json")
def json_handler(req, resp):
response_data = {"name": "some name", "type": "json"}
resp.body = json.dumps(response_data).encode()
resp.content_type = "application/json"
```
### Unit Tests
The recommended way of writing unit tests is with [pytest](https://docs.pytest.org/en/latest/). There are two built in fixtures that you may want to use when writing unit tests with PyFrameKit.
```
def test_duplicate_routes_throws_exception(app):
@app.route("/home")
def home(req, resp):
resp.text = "Hello from Home"
with pytest.raises(AssertionError):
@app.route("/home")
def home2(req, resp):
resp.text = "Hello from Home2"
```
The other one is client that you can use to send HTTP requests to your handlers. It is based on the famous [request](https://requests.readthedocs.io/en/latest/) and it should feel very familiar:
```
def test_parameterized_routing(app, test_client):
@app.route("/hello/{name}")
def greeting(request, response, name):
response.text = f"Hello {name}"
```
## Templates
The default folder for templates is templates. You can customize this location:
```
app = PyFrameKitApp(templates_dir="path/to/your/templates")
```
Then you can use HTML files in that folder like so in a handler:
```
@app.route("/template")
def template_handler(req, resp):
resp.html = app.template(
"home.html",
context={"new_title": "New Title", "new_body": "New Body"}
)
```
## Static Files
Static files are served from the static directory by default. This location is also configurable:
```
app = PyFrameKitApp(static_dir="path/to/your/static")
```
Then you can use the files inside this folder in HTML files:
```
{{title}}
{{body}}
This is a paragraph
```
## Middleware
Add custom middleware to process requests and responses. Middleware classes inherit from `pyframekit.middleware.Middleware` and override the `process_request` and `process_response` methods:
```
from pyframekit.app import PyFrameKitApp
from pyframekit.middleware import Middleware
app = PyFrameKitApp()
class Middleware:
def process_request(self, req):
print("Before dispatch", req.url)
def process_response(self, req, resp):
print("After dispatch", req.url)
app.add_middleware(Middleware)
```