BlackSheep: Fast ASGI web framework for Python
github.com
github.com
Neat, but tbh I am very bearish on Python's future beyond APIs - templating html in Python is a terrible idea for anything larger than a hobby site, when you can have an API-first app with a React+Typescript frontend.
And if you need more than FastAPI, you might as well use django-ninja and get the full Django ecosystem at your disposal.
But it's also really not that difficult. Auth just takes a lot of practice for people to grok so most people don't want to touch it.
I'll open source something once we're done solving the problem cleanly at my company.
The actual authentication remains on the Django app, using the standard way of POSTing to a login form and receiving a session cookie -- only instead of a server-generated page serving a HTML form, you have the PWA lipstick sending data directly. This approach is so much simpler than dealing with id/access/refresh tokens, encryption keys, black lists, and all of the OIDC dance.
Use React and JSX (TSX, to be more specific). NextJS does good quality SSR, use that if you want an app that is also usable without JS.
Anybody not in that ecosystem /right now/ is going to be lagging behind by so much in velocity and capability, and will get eaten by competition.
I see the velocity, but high magnitude doesn't mean that you're going the right direction.
If for some reason you need to mix sync/async views (maybe during a migration) you can use uvicorn as a gunicorn worker type, and run multiple workers. But your async views will still scale much better.
I think Django is justified given how powerful it is, but these micro-frameworks are ridiculous.
https://docs.python.org/3/library/http.server.html#module-ht...
And I assume Python cannot handle it's own HTTP server (using threads, similar to Javalin's virtual threads)? I always cringe when a programming language needs to find another solution/language to handling its processes. I understand why you will need a load balancer, but for small, simple projects, I like to contain things.
The async movement is recent, and optional in Python. There are benefits for async, but obvious downsides line coloured functions.
ASGI is an Interface standard, not an implementation in another language. The AGSI compliant servers that Blacksheep recommends are both written in Python.
1. https://quart.palletsprojects.com/en/latest/
2. https://flask.palletsprojects.com/en/stable/async-await/#asy...
Yes, Python has its own ASGI HTTP Servers, Uvicorn and Hypercorn are two most common.
I agree, I'm not sure what this project aims to fix over other more established projects.
it allows you to write an application (or in this case a framework) and have it work with multiple application webservers. I don’t know if java has an equivalent, but imagine if you could switch from tomcat to something else without changing any application code.
> BlackSheep belongs to the category of ASGI web frameworks, so it requires an ASGI HTTP server to run, such as uvicorn, or hypercorn.
but uvicorn and hypercorn are both Python libraries
so no need to cringe
It's not as batteries-included as Django, primarily because Django's the incumbent and the ecosystem is vast.
It's not as modular and independent as Flask, which it's taking a lot of inspiration from.
It doesn't seem to bring enough to the table to be flat out better all-rounder than FastAPI.
I'm quite unsure where I'd use it instead of one of those 3.
From searching through the documentation and trying to find it out, the primary "secret sauce" seems to be Dependency Injection, quite a hard sell for a Python framework.
I've actually used FastAPI's DI, which is a nice convenience. It didn't feel as a big selling point, again, due to this being Python. Wrapping up your own DI is near trivial, and barely feels like a pattern.
Thanks for pointing that out, I didn't even realize last night how weak of a selling point this is, even.
For a start, this shouldn't be compared with Django at all. This is, as far as I can tell, a web framework, as advertised. Django is a complex CRUD-web-app framework that is commonly mistaken for a web framework (probably because it calls itself that).
This is important because while there isn't really room for many Djangos, there is room for many web frameworks. That's why we have lots: Flask, Bottle, FastAPI, Pyramid etc.
Django is like a complete house: it has everything you need for doing a very specific thing, namely building a CRUD web app. But if you want to add an extra room or something it's a struggle. You either rebuild the house or clumsily bolt on an extension.
This kind of thing fits into your own software architecture which you'll hopefully design to be simple and adaptable. The choice between FastAPI, Flask or this is but a tiny detail at the edge of your application, like the colour of the front door of your house. You don't build the house around the front door, you just choose the colour you like and if you change your mind later you get a new door.
Stuff like Django has convinced people that choice of web framework is a huge deal that will determine the entire future of your application. It shouldn't be like that. Choose modular components and don't write yourself into a corner.
What does that have to do with (negative) mental health?