NetJin is a lightweight web server implemented in Python using sockets. It provides a simple implementation of the HTTP protocol, allowing users to build and run web applications with ease.
- Routing: Easily define routes for different URLs and HTTP methods.
- Request Handling: Handle incoming HTTP requests and process them accordingly.
- Response Rendering: Render HTML templates for generating dynamic content and return other responses as well.
- Error Handling: Customizable error handling for managing HTTP errors.
You can install NetJin using pip:
pip install WebServerAlternatively, you can clone or download the repository and include the NetJin file in your project directory.
-
Import the necessary classes:
from WebServer import WebServer, Request, Response
-
Create an instance of the
WebServerclass:app = WebServer(debug=True)
-
Define routes using the
@app.route()decorator, specifying the URL path and supported HTTP methods. For example:@app.route("/", methods=["GET"]) def home(request: Request, response: response) -> None: return response.render("index") # This corresponse to index.html
-
Implement functions to handle each route, receiving
ResponseandRequestobjects as parameters. -
Run the server:
if __name__ == "__main__": app.run()
To configure your project, create a file named Settings.py in a directory named Configurations at the root of your project. Define the required variables as needed. For example:
from pathlib import Path
from typing import List
__all__ = [
"BASE_DIR",
"HOST",
"PORT",
"DEBUG",
"ALLOWED_HOST",
"TEMPLATE_DIRS",
"STATIC_DIRS",
"PUBLIC_DIR",
"MEDIA_DIR",
]
# Build paths inside the project like this: BASE_DIR / 'subdir'.
BASE_DIR = Path(__file__).resolve().parent.parent.parent.parent
# Turn off (False) for production.
DEBUG: bool = True
# Server Configuration
HOST: str = "127.0.0.1"
PORT: int = 8000
ALLOWED_HOST: List[str] = []
# Path to HTML files
TEMPLATE_DIRS: str | List[str] = "templates" # BASE_DIR / "templates"
# Path to static folders (Directory for CSS, JS, Image, etc.)
STATIC_DIRS: List[str] = ["statics"] # BASE_DIR / "statics"
# Path for public directory (where non-static files are located.)
PUBLIC_DIR: str = "public"
# Path where media files are stored.
MEDIA_DIR: str = "media"Check out the example directory for sample usage and demonstrations.
- No external dependencies. Uses only Python's built-in
socketmodule.
Contributions are welcome! Feel free to fork the repository, make improvements, and submit pull requests.
This project is licensed under the MIT License. See the LICENSE file for details.
For any inquiries or support, please contact acharyaraj.webserver@gmail.com or visit the GitHub profile.
.
├── config/
│ ├── settings.py
│ ├── __init__.py
│ └── other_app_configurations.py
├── static/
│ ├── csses
│ └── javascripts
├── media/
│ ├── images
│ └── videos
├── public/
│ ├── logo
│ ├── robot.txt
│ └── manifest.json
├── views/
│ ├── index.html
│ └── Other HTMLs
└── main.py