Web-PyOctopus is a lightweight Python web framework designed for learning and experimentation, inspired by modern frameworks like Django and FastAPI.
Project description
Web-PyOctopus: A Lightweight Python Web Framework
Web-PyOctopus is a lightweight and easy-to-use Python web framework built for learning purposes. It is a WSGI framework, meaning it can be used with any WSGI application server such as Gunicorn.
🔗 View on PyPI
🚀 Installation
Step 1: Set Up a Virtual Environment
-
Install
virtualenv(if not already installed):pip install virtualenv
-
Create a Virtual Environment:
python -m venv venv
-
Activate the Virtual Environment:
- On Windows:
venv\Scripts\activate
- On macOS/Linux:
source venv/bin/activate
- On Windows:
Step 2: Install Web-PyOctopus
Install Web-PyOctopus using pip:
pip install web-pyoctopus
Step 3: Install Gunicorn
Install Gunicorn to run the application:
pip install gunicorn
📌 Basic Usage
Step 1: Create app.py
Create a file named app.py in your project directory and add the following code:
from pyoctopus.api import OctopusAPI
# Create an instance of OctopusAPI
app = OctopusAPI()
# Define a route for the home page
@app.route("/home")
def home(request, response):
response.text = "Hello from the HOME page"
# Define a route with a dynamic parameter
@app.route("/hello/{name}")
def greeting(request, response, name):
response.text = f"Hello, {name}!"
# Define a class-based view
@app.route("/book")
class BooksResource:
def get(self, req, resp):
resp.text = "Books Page"
def post(self, req, resp):
resp.text = "Endpoint to create a book"
# Define a route for template rendering
@app.route("/template")
def template_handler(req, resp):
resp.body = app.template(
"index.html", context={"name": "Web-PyOctopus", "title": "Simple & Awesome Framework"}
).encode()
Step 2: Create a Template (Optional)
If you want to use templates, create a directory named templates in the same folder as app.py. Inside the templates directory, create a file named index.html:
<!DOCTYPE html>
<html>
<head>
<title>{{ title }}</title>
</head>
<body>
<h1>Welcome to {{ name }}</h1>
</body>
</html>
Step 3: Run the Application
Run the application using Gunicorn:
gunicorn app:app
Visit the following URLs in your browser:
http://127.0.0.1:8000/homehttp://127.0.0.1:8000/hello/Octopushttp://127.0.0.1:8000/bookhttp://127.0.0.1:8000/template
📚 Routing & Class-Based Views
Define class-based views for better organization:
@app.route("/book")
class BooksResource:
def get(self, req, resp):
resp.text = "Books Page"
def post(self, req, resp):
resp.text = "Endpoint to create a book"
🎨 Template Rendering
Use templates for dynamic content:
@app.route("/template")
def template_handler(req, resp):
resp.body = app.template(
"index.html", context={"name": "Web-PyOctopus", "title": "Simple & Awesome Framework"}
).encode()
Change the default template directory:
app = OctopusAPI(templates_dir="custom_templates")
📂 Static Files
By default, static files are served from the static directory. You can change it:
app = OctopusAPI(static_dir="assets")
Use them in HTML:
<link href="/static/styles.css" rel="stylesheet" />
🛠 Middleware Support
Create custom middleware by inheriting from Middleware:
from pyoctopus.middleware import Middleware
class SimpleLoggerMiddleware(Middleware):
def process_request(self, req):
print("Request received:", req.url)
def process_response(self, req, res):
print("Response sent:", req.url)
app.add_middleware(SimpleLoggerMiddleware)
🧪 Unit Testing
Use pytest for testing. Fixtures app and client help in writing tests:
def test_home_route(client):
response = client.get("/home")
assert response.text == "Hello from the HOME page"
Parameterized route testing:
def test_dynamic_route(client):
response = client.get("/hello/Octopus")
assert response.text == "Hello, Octopus!"
📜 License
Web-PyOctopus is an open-source project for educational purposes.
🚀 Happy Coding with Web-PyOctopus! 🎉
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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file web-pyoctopus-1.0.6.tar.gz.
File metadata
- Download URL: web-pyoctopus-1.0.6.tar.gz
- Upload date:
- Size: 8.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.10.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a9fc572fd0ef3ebc32573b05ef1558236f80096bdbf3c9bbff1c5039e2061fe6
|
|
| MD5 |
5fb9c1ba737418bc09fa572c828051f4
|
|
| BLAKE2b-256 |
0735dc368abd4f5144d64f24c8ff15d6df677e9d3c7dbbdca46a7434c41c5e48
|
File details
Details for the file web_pyoctopus-1.0.6-py3-none-any.whl.
File metadata
- Download URL: web_pyoctopus-1.0.6-py3-none-any.whl
- Upload date:
- Size: 7.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.10.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3250ea58bfd1c4d0bf9915e0355b19fa5ffb2a60c03a5d20d28a117f2b3be6d2
|
|
| MD5 |
f206c0888a953dd2a682e87bafcfa34d
|
|
| BLAKE2b-256 |
59af5e3847d641b292140b1921b3f700c4c48193261209a41781fd849154e829
|