djangbone

Software screenshot:
djangbone
Software informatie:
Versie: 0.0.2
Upload datum: 14 Apr 15
Ontwikkelaar: Aaron Franks
Licentie: Gratis
Populariteit: 18

Rating: 3.5/5 (Total Votes: 2)

djangbone is een klein Django app die het makkelijk maakt om te werken met Backbone.js frontends & nbsp;. Meer specifiek, het u toestaat om een ​​backend die werkt met de standaard Backbone.sync implementatie snel te bouwen.
Djangbone biedt een abstracte class-based view (BackboneAPIView), die geeft je haken om het te gemakkelijk aanpassen.
Voorbeeld
Na het downloaden / installeren djangbone, alles wat je hoeft te doen is:
1. subklasse BackboneAPIView, en stel de base_queryset en serialize_fields attributen.
2. Draad van de subklasse in uw urlconf uitzicht.
In myapp / views.py:
van myapp.models import Widget
van djangbone.views import BackboneAPIView
klasse WidgetView (BackboneAPIView):
& Nbsp; # base_queryset is een queryset dat alle objecten die zijn bevat
& Nbsp; # bereikbaar via de API:
& Nbsp; base_queryset = Widget.objects.all ()
& Nbsp; # serialize_fields is een lijst van model velden die u wilt worden verzonden
& Nbsp; # in uw JSON resonses:
& Nbsp; serialize_fields = ('id', 'naam', 'beschrijving', 'created_at')
In myapp / urls.py:
van myapp.views import WidgetView
# Maak url patronen voor zowel "verzamelingen" en enkele items:
urlpatterns = patronen ('',
& Nbsp; url (r '^ widgets', WidgetView.as_view ()),
& Nbsp; url (r '? ^ Widgets / (P d +)', WidgetView.as_view ()),
)
Als u wilt de djangbone tests uit te voeren, moet u "djangobone" toe te voegen aan uw INSTALLED_APPS, en draaien python manage.py testen djangbone. De tests gebruiken django.contrib.auth, zodat de app zal ook moeten worden in uw INSTALLED_APPS voor de tests te werk.
Met POST en PUT aanvragen
Backbone.sync maakt gebruik van POST-aanvragen als er nieuwe objecten worden gemaakt, en PUT aanvragen wanneer objecten worden veranderd. Als u wilt deze HTTP-methoden te ondersteunen, moet u opgeven welke vorm klassen te gebruiken voor validatie voor elk type aanvraag.
Om dit te doen, geef BackboneAPIView moet add_form_class (POST) en edit_form_class (PUT) hebben attributen. Meestal wil je een ModelForm voor beide gebruiken, maar ongeacht, moet methode elke vorm's save () het model instantie die is gemaakt of gewijzigd terugkeren.
Hier is een voorbeeld (veronderstellen AddWidgetForm en EditWidgetForm zijn beide ModelForms):
van djangbone.views import BackboneAPIView
van myapp.models import Widget
van myapp.forms importeren AddWidgetForm, EditWidgetForm
klasse WidgetView (BackboneAPIView):
& Nbsp; base_queryset = ...
& Nbsp; serialize_fields = ...
& Nbsp; add_form_class = AddWidgetForm # Gebruikt voor POST-aanvragen
& Nbsp; edit_form_class = EditWidgetForm # Gebruikt voor PUT aanvragen
Als u toegang tot het verzoek object in uw formulier klassen nodig (misschien om request.user op te slaan op uw model, of het uitvoeren van extra validatie), voeg een methode set_request () om uw formulier klassen als volgt:
klasse AddWidgetForm (ModelForm):
& Nbsp; klasse Meta:
& Nbsp; model = Widget
& Nbsp; def set_request (zelf, aanvraag):
& Nbsp; self.request = verzoek
& Nbsp; # Nu heb je toegang tot self.request in schone () en op te slaan ()
Pagination
Wilt u het aantal items terug voor een collectie te beperken, kunt u op basis paginering met BackboneAPIView's page_size attribuut. Stel het in op een integer en krijgt zonder een id zal worden gepagineerd. De parameter standaard GET is "p", maar u kunt deze overschrijven met BackboneAPIView.page_param_name.
Customization
Er is een goede kans dat u wilt uw BackboneAPIView subklasse wrap met extra functionaliteit, bijvoorbeeld om alleen geregistreerde gebruikers toegang tot deze visie. U kunt Django's method_decorator gebruiken op BackboneAPIView's verzending () methode om dit te doen als volgt:
van django.contrib.auth.decorators import login_required
van django.utils.decorators import method_decorator
klasse WidgetView (BackboneAPIView):
& Nbsp; ...
& Nbsp;method_decorator (login_required)
& Nbsp; def verzending (zelf, verzoek, * args, ** kwargs):
& Nbsp; return super (WidgetView, zelf) .dispatch (* args, ** kwargs)
Je zou ook willen de base_queryset afhankelijk van het verzoek (of een extra url parameter) variëren. U kunt ook overschrijven verzending () om dit te doen, bijvoorbeeld:
klasse WidgetView (BackboneAPIView):
& Nbsp; base_queryset = Widgets.objects.all ()
& Nbsp; def verzending (zelf, verzoek, * args, ** kwargs):
& Nbsp; als request.method in ['put', 'DELETE']:
& Nbsp; self.base_queryset = Widgets.objects.filter (eigenaar = request.user)
& Nbsp; return super (WidgetView, zelf) .dispatch (* args, ** kwargs)
Een opmerking over CSRF bescherming
Backbone.sync stuurt POST-aanvraag gegevens als JSON, die zo goed niet werkt met Django's ingebouwde CSRF middleware (de laatste verwacht vorm gecodeerde POST-gegevens). Als resultaat, als je gebruik maakt van de CSRF middleware, wil je ofwel:
1. Wikkel uw BackboneAPIView verzending methode met de csrf_exempt decorateur om CSRF bescherming uit te schakelen, of ...
2. (aanbevolen) in JavaScript, configureren ajax methode jQuery te sturen altijd de X-CSRFToken HTTP header. Zie de Django CSRF documentatie voor één manier om het te doen, of als u {% csrf_token%} ergens in je Django template kunt u iets gebruiken als:
& Nbsp; // Setup $ .ajax te sturen altijd een X-CSRFToken header:
& Nbsp; var csrfToken = $ ('input [naam = csrfmiddlewaretoken]') val ().;
& Nbsp; $ (document) .ajaxSend (function (e, XHR, instellingen) {
& Nbsp; xhr.setRequestHeader ('X-CSRFToken', csrfToken);
& Nbsp;});
Veronderstellingen
Djangbone maakt een paar aannames over uw modellen met het oog op het werk:
- Uw model heeft een integer primaire sleutel met de naam 'id'
Alternatieven
Djangbone is ontworpen om een ​​eenvoudige manier om uw modellen serialize om JSON op een manier die werkt met Backbone zijn. Het is niet proberen om een ​​algemene, format-agnostisch API generator zijn. Als dat is wat u zoekt, zal je waarschijnlijk wilt gaan met iets als Django-tastypie of Django-zuiger plaats.
Als u al gebruikt django-tastypie, of op zoek bent naar een meer met volledige functionaliteit API backend dan Djangbone biedt, kunt u kijken naar backbone-tastypie, die Backbone.sync op een manier die goed werkt overschrijft (via javascript) . met tastypie

Eisen

  • Python
  • Django

Andere software van ontwikkelaar Aaron Franks

Turrentine
Turrentine

15 Apr 15

Reacties op djangbone

Reacties niet gevonden
Commentaar toe te voegen
Zet op de beelden!