Skip to main content

Opinionated collection of Django and DRF tools that came in handy time and again.

Project description

pypi-version

… wait what? no seriously, why isn’t that part of Django/DRF?

Opinionated collection of Django and Django REST framework tools that came in handy time and again.

  • AdminItemAction
    • Allow triggering context-aware custom admin operations in model list views.

  • admin_navigation_link
    • Allow navigation from the admin list view to other related models via links.

  • MinimalUser (abstract model)
    • Bare minimum user model ready for customization.

    • Removes the username and auxiliary fields like first_name and last_name.

    • Allow creating users without a valid password (unusable password)

    • Abstract since its highly recommended to subclass the user model anyway.

  • ValidatedJSONField (model field)
    • validate the structure of JSON fields with Pydantic models.

  • TokenAuthentication
    • When OAuth2 adds too much complexity, DRF’s TokenAuthentication is too simple, and django-rest-knox does not quite fit the permissioning.

    • No plain passwords in database (PBKDF2, i.e. hashed and salted)

    • Enabled for permission scoping

    • Easy (one-time-view) token creation in Django admin

  • BaseModel (abstract model)
    • Reusable base model with automatic created_at, updated_at fields.

    • Primary key is a random UUID (uuid4).

    • Ensure validation logic (full_clean()) always runs, not just in a subset of cases.

  • AppSettings
    • A settings container with defaults and string importing inspired by DRF’s APISettings

License

Provided by T. Franzel, Licensed under 3-Clause BSD.

Requirements

  • Python >= 3.6

  • Django >= 3.0

  • Django REST Framework (optional)

Installation

$ pip install django-seriously

Usage

AdminItemAction

# admin.py
from django_seriously.utils.admin import AdminItemAction


class UserAdminAction(AdminItemAction[User]):
    model_cls = User
    actions = [
        ("reset_invitation", "Reset Invitation"),
    ]

    @classmethod
    def is_actionable(cls, obj: User, action: str) -> bool:
        # check whether action should be shown for this item
        if action == "reset_invitation":
            return is_user_resettable_check(obj) # your code
        return False

    def perform_action(self, obj: User, action: str) -> Any:
        # perform the action on the item
        if action == "reset_invitation":
            perform_your_resetting(obj)  # your code
            obj.save()


@admin.register(User)
class UserAdmin(ModelAdmin):
    # insert item actions into a list view column
    list_display = (..., "admin_actions")

    def admin_actions(self, obj: User):
        return UserAdminAction.action_markup(obj)
# urls.py
from django_seriously.utils.admin import AdminItemAction

urlpatterns = [
    ...
    # item actions must precede regular admin endpoints
    path("admin/", AdminItemAction.urls()),
    path("admin/", admin.site.urls),
]

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

django-seriously-0.2.0.tar.gz (15.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

django_seriously-0.2.0-py3-none-any.whl (16.9 kB view details)

Uploaded Python 3

File details

Details for the file django-seriously-0.2.0.tar.gz.

File metadata

  • Download URL: django-seriously-0.2.0.tar.gz
  • Upload date:
  • Size: 15.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.1 importlib_metadata/4.8.2 pkginfo/1.8.2 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.7

File hashes

Hashes for django-seriously-0.2.0.tar.gz
Algorithm Hash digest
SHA256 afef2124a407a1885fc66780e257b27ad02bdbb086075170fe2f9d41c0462da8
MD5 a605df40a1d119291b41aef6a1e3b051
BLAKE2b-256 7974c198aa375f575f7be76f6d273c9fe66f5e327e6b9b1811e8ca58d0403373

See more details on using hashes here.

File details

Details for the file django_seriously-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: django_seriously-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 16.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.1 importlib_metadata/4.8.2 pkginfo/1.8.2 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.7

File hashes

Hashes for django_seriously-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 1efaa6d335f1f301a5445cd28a7be8d1e1422d12c744e0a5e6a93c39b0e8bd83
MD5 ab5928bb2764fe5b1cbbde116972675e
BLAKE2b-256 7af60ac1b397d33bc03a7eac0dd031ec7a6b14a7d6ab619316f026c6a787160e

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page