Django Framework / Smarter CRUD для Django

в 16:42, , рубрики: application, crud, django, python, метки: , , ,

Выпустил в свет инструмент для более удобного создания CRUD-based приложений на Django: github.com/05bit/django-smarter.

Для чего это нужно? Бывает, что приложение состоит из однотипных страниц — создать, удалить, посмотреть объект, список объектов. При этом, функционал стандартной админки уже тесен, так как нужен более хитрый интерфейс и не всегда стандартная логика.

Да, есть Generic views, но это все равно достаточно много однотипного кода, что быстро приводит к огульному копи-пасту.

Пример использования — взят из документации.

Опишем простую модель:

class Page(models.Model):     title = models.CharField(max_length=100)     text = models.TextField      def __unicode__(self):         return self.name 

И дальше в urls.py:

from smarter import SmarterSite from myapp.models import Page  site = SmarterSite() site.register(Page)  urlpatterns = patterns('', 	url(r'^', include(site.urls)),  	# other urls ... ) 

Шаблоны подцепляются автоматически по схеме [app]/[model]_[action].html, нужно их только создать.

Дальше, при необходимости можно писать собственные view-классы. Из приятных, но пока недокументированных возможностей — кастомизация форм.

Например, с добавлением view-метода:

from smarter.views import GenericViews from myapp.models import Page  class PageViews(GenericViews):     model = Page     form_opts = {         'edit': {             'exclude': ('title',),         }     }      @property     def urlpatterns(self):             urlatterns = super(PageViews, self).urlpatterns + patterns('',                     url(r'^(?P<pk>d+)/bookmark/$',                             self.as_view('bookmark'),                             name=self.url_name('bookmark')),             )             return urlatterns      def bookmark_view(self, request, pk):             obj = get_object_or_404(page, pk=pk)             # do some stuff for bookmarking ...             context = {'obj': obj}             # will render to myapp/page_bookmark.html             return self.render_to_response(context) 

И дальше в urls.py:

from smarter import SmarterSite from myapp.views import PageViews  site = SmarterSite() site.register(PageViews)  urlpatterns = patterns('',         url(r'^', include(site.urls)),          # other urls ... ) 

Удобно так же, например, сделать общий функционал для всех view в базовом классе, и потом наследовать от него. Например — повесить декоратор login_required или типичную для приложения обработку ajax-запросов.

Надеюсь, кому-то будет полезно.

Так же, на документацию пока нет достаточно сил и времени, буду рад помощи в виде pull request-ов. А так же готов отвечать на простые вопросы, в духе «А предусмотрено ли то-то?» или «Есть ли пример как сделать что-то?»

Всем привет!

Автор: rudyryk


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js