A learning opportunity for a web framework.
Go to file
2024-09-01 21:05:24 -04:00
docs 🔒 fix issues with CSRF middleware 2024-09-01 21:05:24 -04:00
spiderweb 🔒 fix issues with CSRF middleware 2024-09-01 21:05:24 -04:00
static_files staticfiles support\! 2024-08-14 19:27:37 -04:00
templates 🚧 add groundwork for origins 2024-08-30 20:34:43 -04:00
.gitignore 🎉 first commit 2024-07-28 20:46:42 -04:00
conftest.py Testing! 2024-08-26 01:56:08 -04:00
example2.py Testing! 2024-08-26 01:56:08 -04:00
example_middleware.py 🎨 run black 2024-08-14 17:28:01 -04:00
example.py session middleware and databases! 2024-08-25 00:04:29 -04:00
LICENSE.txt 📄 add license 2024-08-23 22:17:21 -04:00
poetry.lock Testing! 2024-08-26 01:56:08 -04:00
pyproject.toml 🚧 add groundwork for origins 2024-08-30 20:34:43 -04:00
README.md 📝 add black code style icon 2024-09-01 19:12:51 -04:00
test.py 📝 first push of docs 2024-08-26 01:56:56 -04:00

spiderweb

PyPI release version for Spiderweb Gitmoji Code style: Black

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:

poetry add spiderweb-framework

Create a new file and drop this in it:

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
  • Database support (using Peewee, but the end user can use whatever they want as long as there's a Peewee driver for it)
  • Session middleware

The TODO list:

  • Tests (important)
  • Fix CSRF middleware

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.