A Django package that provides 'out-of-the-box' JWT auth, user, group, and permission APIs for use in Single Page Apps (eg - Vue, React).
Project description
Django SPA Day
A Django package that provides "out-of-the-box" basic auth, user, group, and permission APIs for use in Single Page Apps (eg - Vue, React).
So easy, you can take a SPA day!
django-spaday
deliberately stays below version 1.x.x to signal that every new version may potentially have breaking changes.
NOTE:
django-spaday
is very opinionated as its for internal use.
Features
- Auth (login/logout/change password)
- User management w/permissions
- Group management w/permissions
- Audit Log (optional)
- Django Celery Results (optional)
Requirements
Assumes you have started from this cookiecutter-django template which leverages the following.
- dj-rest-auth
- django-auditlog
- django-celery-results
- django-cors-headers
- django-filter
- djangorestframework
- djangorestframework-simplejwt
- django-perm-filter
Quickstart
Install Django SPA Day:
python3 -m pip install django-spaday
Add it to your INSTALLED_APPS
:
INSTALLED_APPS = (
...
'django_spaday',
)
Settings
In config/urls.py
add the urls:
urlpatterns = [
path(r"djadmin/", admin.site.urls),
...
path("", include("django_spaday.urls")),
]
In config/api_router.py
add the API urls:
urlpatterns = [
path("", include("django_spaday.api.urls")),
# Place all your app's API URLS here.
...
path("auth/", include("dj_rest_auth.urls")),
]
In config/settings/base.py
ensure your dj-rest-auth
settings include the following:
REST_AUTH = {
"USE_JWT": True,
"SESSION_LOGIN": False,
"TOKEN_MODEL": None,
"USER_DETAILS_SERIALIZER": "django_spaday.api.serializers.UserAuthSerializer",
"JWT_AUTH_HTTPONLY": False, # False means js can access the cookie
}
NOTE: This is imporatant as it will provide the frontend app with the logged in User's permissions, etc.
Overrides
These are the SPA_DAY
defaults and do not need to be specified in settings
unless you wish to override.
SPA_DAY = {
"PERMISSION_SERIALIZER": "django_spaday.api.serializers.PermissionListSerializer",
"USER_SERIALIZER": "django_spaday.api.serializers.UserSerializer",
"GROUP_SERIALIZER": "django_spaday.api.serializers.GroupSerializer",
"CHANGE_PASSWORD_SERIALIZER": "django_spaday.api.serializers.ChangePasswordSerializer",
"USER_AUTH_SERIALIZER": "django_spaday.api.serializers.UserAuthSerializer",
"LAST_LOGIN_SERIALIZER": "django_spaday.api.serializers.LastLoginSerializer",
}
Local Development
make env
make pip_install
make migrations
make migrate
make superuser
make serve
- Visit
http://127.0.0.1:8000/djadmin/
for the Django Admin - Visit
http://127.0.0.1:8000/api/docs/
for the API docs
Testing
Currently django_spaday has 94% test coverage.
- Pytest:
make pytest
- Coverage:
make coverage
- Open Report:
make open_coverage
- Open Report:
Makefile Commands
Environment
Command | Description |
---|---|
env |
Create virtual environment |
env_remove |
Remove virtual environment |
Pip
Command | Description |
---|---|
pip_install |
install requirements |
pip_list |
run pip list |
pip_freeze |
run pipfreezer |
pip_checker |
run pipchecker |
Django
Command | Description |
---|---|
manage |
run django manage.py (eg - make manage cmd="shell") |
superuser |
Create superuser |
migrations |
Create migrations (eg - make migrations app="core") |
migrate |
Apply migrations |
serve |
Run server |
show_urls |
show urls |
shell |
run shell |
flush |
Flush database |
Testing
Command | Description |
---|---|
pytest |
Run tests |
pytest_verbose |
Run tests |
coverage |
Run tests with coverage |
coverage_verbose |
Run tests with coverage |
coverage_skip |
Run tests with coverage |
open_coverage |
open coverage report |
Cleanup
Command | Description |
---|---|
clean_build |
remove build artifacts |
clean_pyc |
remove python file artifacts |
clean |
remove all build and python artifacts |
clean_pytest_cache |
clear pytest cache |
clean_tox_cache |
clear tox cache |
clean_coverage |
clear coverage cache |
clean_tests |
clear pytest, tox, and coverage caches |
Miscellaneous
Command | Description |
---|---|
tree |
Show directory tree |
Deploy
Command | Description |
---|---|
dist |
builds source and wheel package |
release_test |
upload package to pypi test |
release |
package and upload a release |
Changelog
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
[0.1.1] - 2024-03-07
- Added 94% test coverage
[0.1.0] - 2022-04-19
- First release on PyPI.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for django_spaday-0.1.1-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | d2fa5440f4d881968ac613c0e7ceda9f7ee9659e99f1e193bd991dedc7cfbd03 |
|
MD5 | b5b57d569259fd2736ff170401a8c1c4 |
|
BLAKE2b-256 | 23bb37cdd7d03c8f20f4eee8d35a80ffa37855536d32ffb2ccfcb636f8d7fd11 |