Skip to main content

EZDjangoCommon

Project description

EZDjangoCommon

ez_django_common is a Django package designed to simplify and standardize common tasks in Django projects. It provides a set of utilities, custom responses, admin enhancements, and other reusable components that can be easily integrated into any Django project. This package aims to reduce boilerplate code and improve consistency across your Django applications.

Features

  • Custom Admin Enhancements: Enhanced Django admin interface with custom widgets, inline models, and improved form handling.
  • Custom Responses: Standardized API responses with support for pagination, error handling, and success messages.
  • JWT Utilities: Custom JWT token views for authentication.
  • Model Mixins: Reusable mixins for common CRUD operations in Django viewsets.
  • Permissions: Customizable Django model permissions with support for additional permissions.
  • Utilities: Helper functions for logging, SMS, and file uploads.

Installation

You can install ez_django_common via pip:

pip install ez-django-common

Or if you want to install from source, you can run this command to install the package:

pip install git+https://github.com/ezhoosh/EZDjangoCommon.git

Then add these packages to INSTALLED_APPS:

INSTALLED_APPS = [
    'ez_django_common',
    'image_uploader_widget',
    'tinymce',
    ...
]

Usage

Custom Admin Enhancements

BaseModelAdmin

The BaseModelAdmin class provides a set of default configurations for Django admin models, including custom widgets for text and file fields.

from ez_django_common.admin import BaseModelAdmin
from django.contrib import admin
from .models import MyModel

@admin.register(MyModel)
class MyModelAdmin(BaseModelAdmin):
    list_display = ('name', 'created_at')

Custom Inlines

The package provides custom inline classes (TabularInline, StackedInline, NonrelatedTabularInline, NonrelatedStackedInline) that can be used to organize inline models in the admin interface.

from ez_django_common.admin import TabularInline
from django.contrib import admin
from .models import MyModel, RelatedModel

class RelatedModelInline(TabularInline):
    model = RelatedModel

@admin.register(MyModel)
class MyModelAdmin(BaseModelAdmin):
    inlines = [RelatedModelInline]

Unfold

To use unfold for panel admin, first add unfold to INSTALLED_APPS:

INSTALLED_APPS = [
    'unfold', # before django.admin.contrib
    ...
]

then use BaseModelAdmin instead of admin.ModelAdmin in admin classes:

from ez_django_common.admin import BaseModelAdmin

@admin.register(ModelName)
class ModelNameAdmin(BaseModelAdmin):
    ...

Custom Responses

The enveloper function wraps your serializers in a standardized response format, including fields for data, error, and message.

from ez_django_common.custom_responses.enveloper import enveloper

@extend_schema(
    responses=enveloper(SampleRetrieveSerializer, many=False),
)
def retrieve(self, request, *args, **kwargs):
    return super().retrieve(request, *args, **kwargs)

Or if your response is a list of objects:

from ez_django_common.custom_responses.enveloper import enveloper_pagination

@extend_schema(
    ...
    responses=enveloper_pagination(SampleRetrieveSerializer, many=True),
)
def list(self, request, *args, **kwargs):
    return super().list(request, *args, **kwargs)

Custom Exception Handler

The custom_exception_handler provides a standardized way to handle exceptions in your Django REST Framework views.

REST_FRAMEWORK = {
    ...
    "EXCEPTION_HANDLER": "ez_django_common.custom_responses.exception.custom_exception_handler",
    ...
}

JWT Utilities

  • CustomTokenViewBase

The CustomTokenViewBase class provides a base for custom JWT token views, including token refresh and verification.

from ez_django_common.custom_responses.jwt import CustomTokenRefreshView, CustomTokenVerifyView
from rest_framework_simplejwt.views import TokenRefreshView, TokenVerifyView

urlpatterns = [
    path('token/refresh/', CustomTokenRefreshView.as_view(), name='token_refresh'),
    path('token/verify/', CustomTokenVerifyView.as_view(), name='token_verify'),
]

Model Mixins

The package includes several mixins for common CRUD operations in Django viewsets.

from ez_django_common.custom_responses.viewsets import CustomModelViewSet
from .models import MyModel
from .serializers import MySerializer

class MyModelViewSet(CustomModelViewSet):
    queryset = MyModel.objects.all()
    serializer_class = MySerializer

Permissions

  • CustomDjangoModelPermissions

The CustomDjangoModelPermissions class extends Django's default model permissions, allowing you to add additional permissions.

from ez_django_common.permissions import get_custom_model_permissions
from rest_framework.permissions import IsAuthenticated

permission_classes = [IsAuthenticated, get_custom_model_permissions(['myapp.view_mymodel'])]

Auto-Translation (Optional)

The BaseModel includes automatic translation functionality for Django models with django-modeltranslation. To enable this feature:

  1. Install the required dependencies:
pip install googletrans==4.0.0rc1 django-modeltranslation
  1. Add to your Django settings:
# Enable auto-translation
AUTO_TRANSLATE_ENABLED = True

# Configure languages (required for translation)
LANGUAGES = [
    ('en', 'English'),
    ('fa', 'Persian'),
    ('ar', 'Arabic'),
]
LANGUAGE_CODE = 'en'  # Default language
  1. Use the BaseModel in your models:
from ez_django_common.models import BaseModel

class MyModel(BaseModel):
    title = models.CharField(max_length=200)
    description = models.TextField()

# When you save an instance, missing translations will be automatically generated

Note: Auto-translation only works if:

  • AUTO_TRANSLATE_ENABLED = True in settings
  • django-modeltranslation is installed and configured
  • googletrans library is available
  • Your model is registered with modeltranslation

Utilities

  • Upload_to

The upload_to function provides a standardized way to handle file uploads in Django models.

from ez_django_common.storages import upload_to
from django.db import models

def upload_to_path(instance, filename):
    return upload_to(instance, filename, folder="path")

class MyModel(models.Model):
    file = models.FileField(upload_to=upload_to_path)

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

ez_django_common-1.2.7.tar.gz (56.6 kB view details)

Uploaded Source

Built Distribution

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

ez_django_common-1.2.7-py3-none-any.whl (58.4 kB view details)

Uploaded Python 3

File details

Details for the file ez_django_common-1.2.7.tar.gz.

File metadata

  • Download URL: ez_django_common-1.2.7.tar.gz
  • Upload date:
  • Size: 56.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.19

File hashes

Hashes for ez_django_common-1.2.7.tar.gz
Algorithm Hash digest
SHA256 373d7f50be5db9461ad3c1bf28787dd9f37984658338eaf3b342a9a1422838f2
MD5 f32e58f9d56ad6c9968801eda8aade85
BLAKE2b-256 2a136056edf021f146f52bd576d6620df886827b99a5d49a8d25e451f2289ba3

See more details on using hashes here.

File details

Details for the file ez_django_common-1.2.7-py3-none-any.whl.

File metadata

File hashes

Hashes for ez_django_common-1.2.7-py3-none-any.whl
Algorithm Hash digest
SHA256 2512b41fb24beb1b791835422238647985c500d5e5643ed92aab2014708e1deb
MD5 ac0ef41b04c033802653afc7408dbb3b
BLAKE2b-256 d8db26314b8079f00c31e950fb21b3ebce49a5f20773deaaa84f617a667cb09a

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