diff --git a/README.md b/README.md index 053df14..0e37a7c 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,64 @@ # spiderweb -A learning opportunity for a web framework. \ No newline at end of file +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() +``` + +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 + * Gunicorn support + * Full middleware implementation + * Limit routes by HTTP verbs + * Custom error routes + * Built-in dev server + * HTML templates with Jinja2 + * Static files support + * Cookies (reading and setting) + * Optional append_slash (with automatic redirects!) + * ~~CSRF middleware implementation~~ (it's there, but it's crappy and unsafe. I'm working on it.) + * Optional POST data validation middleware with Pydantic + +The TODO list: + + * Tests (important) + * Database support + * Session middleware + * Fix CSRF middleware once database support is included + +Once tests are in and proven to work, then I'll release as version 1.0. + +More documentation to follow! + +If you're reading this on GitHub, this repository is a public mirror of https://git.joekaufeld.com/jkaufeld/spiderweb. \ No newline at end of file