# spiderweb
As a professional web developer focusing on arcane uses of Django for arcane purposes, it occurred to me a little while ago that I didn't actually know how a web framework _worked_. So I built one. `spiderweb` is a small web framework, just big enough to hold a spider. Getting started is easy: ```shell poetry add spiderweb-framework ``` Create a new file and drop this in it: ```python from spiderweb import SpiderwebRouter from spiderweb.response import HttpResponse app = SpiderwebRouter() @app.route("/") def index(request): return HttpResponse("HELLO, WORLD!") if __name__ == "__main__": app.start() ``` ## [View the docs here!](https://itsthejoker/github.io/spiderweb) My goal with this framework was to do three things: 1. Learn a lot 2. Create an unholy blend of Django and Flask 3. Not look at any existing code. Go off of vibes alone and try to solve all the problems I could think of in my own way And, honestly, I think I got there. Here's a non-exhaustive list of things this can do: - Function-based views - Optional Flask-style URL routing - Optional Django-style URL routing - URLs with variables in them a lรก Django - Full middleware implementation - Limit routes by HTTP verbs - Custom error routes - Built-in dev server - Gunicorn support - HTML templates with Jinja2 - Static files support - Cookies (reading and setting) - Optional append_slash (with automatic redirects!) - CSRF middleware - CORS middleware - Optional POST data validation middleware with Pydantic - Session middleware with built-in session store - Database support (using Peewee, but you can use whatever you want as long as there's a Peewee driver for it) - Tests (currently a little over 80% coverage) Once tests are in and proven to work, then I'll release as version 1.0. - currently missing tests for cors middleware If you're reading this on GitHub, this repository is a public mirror of https://git.joekaufeld.com/jkaufeld/spiderweb.