Using django user with async frameworks like aiohttp, starlette etc.
pip install async-django-session async-django-user
Take a look at registration / authorization examples for aiohttp + databases or starlette + asyncpg.
There's two ways of communicating to database available:
database = databases.Database(DB_URI)
await database.connect()
backend = async_django_user.databases.Backend(database, SECRET_KEY)
pool = await asyncpg.create_pool(DB_URI)
backend = async_django_user.asyncpg.Backend(pool, SECRET_KEY)
To fetch an user from db by its id stored in [django session] there's
backend.get_user_from_session
method:
user = backend.get_user_from_session(session)
It's lazy so the user data won't be actually fetched until you call its
load
method. It caches the result, so it's inexpensive to call it multiple
times:
await user.load()
User provides dict interface to it's data (eg user["username"]
) and a few
methods:
await user.authenticate(username, password)
- checks credentials and populates
the user from database if they're validuser.login()
- sets session variables logging the user inuser.logout()
- clears the session dataawait user.set_password(password)
- sets a new password for the userawait user.save([fields])
- saves the whole user or a particular set of its
fieldsawait register()
- saves a new user into dbThere's built-in middlewares for a few async frameworks to automatically load user of the current request. Take a look at examples folder for:
Running the examples you can see different frameworks using the same session and user data.
Install the requirements:
cd examples
pip install -r requirements.txt
Create database and tables:
createdb async_django_session
python django_app.py migrate
Create a user:
python django_app.py createsuperuser
Run aiohttp example which uses databases backend:
python aiohttp_app.py
Run starlette example which uses asyncpg backend:
python starlette_app.py
Run django example:
python django_app.py runserver