Giter Site home page Giter Site logo

mzilinec / django-crudbuilder Goto Github PK

View Code? Open in Web Editor NEW

This project forked from asifpy/django-crudbuilder

0.0 0.0 0.0 584 KB

Generic CRUD implementation in Django

Home Page: https://django-crudbuilder.readthedocs.org/en/latest/index.html

License: Apache License 2.0

Python 63.16% JavaScript 12.57% HTML 24.27%

django-crudbuilder's Introduction

Build_ CodeHealth_ coverage_ pypi_ CodeQuality_

django-crudbuilder

Generic CRUD implementation in Django which uses django tables2 to list objects.

Documentation

https://django-crudbuilder.readthedocs.org/en/latest/index.html

Features:

  • Generates class based views for CRUD
  • Uses django-tables2 to display objects in ListView
  • Define multiple crud builders for same model with separate URL
  • Allows custom forms/tables as additional arguments
  • Context provides additional template variables APP_LABEL and MODEL for all CRUD templates
  • Enable/disable login required option for CRUD views
  • Enable/disable permission required option for CRUD views
  • All the generated views/tables/forms/url are extendable.
  • post_create and post_update signals to handle specific actions in Create and Update views
  • Add your own custom templates for List/Create/Detail/Update/Delete views
  • Separate CREATE and UPDATE forms
  • Define your own custom queryset for list view
  • Inline Formset support for parent child models
  • Default Bootstrap3 CSS
  • All the generated views are extendable.

Prerequisites

  • Django 1.10+
  • Python 2.7+, 3.3+
  • Django Tables2

Installation

pip install django-crudbuilder

Usage

Add "crudbuilder" to INSTALLED_APPS

INSTALLED_APPS = {
    ...
    'django_tables2',
    'crudbuilder'
}

LOGIN_REQUIRED_FOR_CRUD = True/False
PERMISSION_REQUIRED_FOR_CRUD = True/False
PROJECT_NAME = 'YOUR PROJECT NAME'

Create models in yourapp/models.py

class Person(models.Model):
    """ an actual singular human being """
    name = models.CharField(blank=True, max_length=100)
    email = models.EmailField()
    created_at = models.DateTimeField(auto_now=True)
    created_by = models.ForeignKey(User, blank=True, null=True)

    def __unicode__(self):
        return self.name

Create CRUD for Person model in yourapp/crud.py

from crudbuilder.abstract import BaseCrudBuilder
from yourapp.models import Person

class PersonCrud(BaseCrudBuilder):
    model = Person
    search_fields = ['name']
    tables2_fields = ('name', 'email')
    tables2_css_class = "table table-bordered table-condensed"
    tables2_pagination = 20  # default is 10
    modelform_excludes = ['created_by', 'updated_by']
    login_required=True
    permission_required=True
    # permissions = {
    #   'list': 'example.person_list',
    #   'create': 'example.person_create'
    # }

Open yourapp/urls.py and add the following

from crudbuilder import urls

urlpatterns = [
    url(r'^admin/', include(admin.site.urls)),
    url(r'^crud/',  include(urls)),
]

View All your registered CRUDS

http://127.0.0.1:8000/crud/

Now you can access the below CRUD URLS

- http://127.0.0.1:8000/crud/yourappname/yourmodelname
- http://127.0.0.1:8000/crud/yourappname/yourmodelname/create/
- http://127.0.0.1:8000/crud/yourappname/yourmodelname/<pk>/detail/
- http://127.0.0.1:8000/crud/yourappname/yourmodelname/<pk>/update/
- http://127.0.0.1:8000/crud/yourappname/yourmodelname/<pk>/delete/

LOGIN REQUIRED

To enable global login required for all the models CRUD views, add the following to settings file

LOGIN_REQUIRED_FOR_CRUD = True

If you want to enable login required only for specific model crud, then you need to add following to crud class

# myapp/crud.py
login_required = True

PERMISSION REQUIRED

To enable global permission required for all the models CRUD views, add the following to settings file

PERMISSION_REQUIRED_FOR_CRUD = True

If you want to enable permission required only for specific model crud, then you need to add following to crud class

# myapp/crud.py
permission_required = True

By enabling either of above flag, crudbuilder by default checks for following permissions:

- For ListView   : <your app_name>.<your model>_list
- For CreateView : <your app_name>.<your model>_create
- For DetailView : <your app_name>.<your model>_detail
- For UpdateView : <your app_name>.<your model>_update
- For DeleteView : <your app_name>.<your model>_delete

If you want to add your own permissions, then define your own permission required dictionary explicitly in CRUD class.

permissions = {
    'list'  : 'example.permission1',
    'create': 'example.permission2'
    'detail': 'example.permission3',
    'update': 'example.permission4',
    'delete': 'example.permission5',
    }

EXTRA TEMPLATE VARIABLES

Added mixin which allows access to additional template variables like app lable and model name in every template.

APP : {{app_label}}
MODEL : {{actual_model_name}}
PLURIZED MODEL : {{pluralized_model_name}}

django-crudbuilder's People

Contributors

asifpy avatar marcoshemann avatar ebertti avatar flaiming avatar wadevries avatar hsum avatar tonimichel avatar cezar77 avatar moring avatar mzilinec avatar paolodina avatar gitter-badger avatar westonplatter avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.