djangbone είναι ένα μικρό Django app που το καθιστά εύκολο να εργαστεί με Backbone.js frontends & nbsp?. Πιο συγκεκριμένα, σας επιτρέπει να δημιουργήσετε γρήγορα ένα backend που λειτουργεί με την προεπιλεγμένη εφαρμογή Backbone.sync.
Djangbone παρέχει μια αφηρημένη κατηγορία, βασίζοντας την άποψή (BackboneAPIView), η οποία σας δίνει αγκίστρια να προσαρμόσετε εύκολα.
Παράδειγμα Χρήσης
Μετά τη λήψη / εγκατάσταση djangbone, το μόνο που χρειάζεται να κάνετε είναι:
1. Υποκατηγορία BackboneAPIView, και να ρυθμίσετε το base_queryset και serialize_fields χαρακτηριστικά.
2. Περάστε τα καλώδια της άποψη υποκατηγορία στην urlconf σας.
Σε MyApp / views.py:
από myapp.models Widget εισαγωγής
από djangbone.views BackboneAPIView εισαγωγής
κατηγορία WidgetView (BackboneAPIView):
& Nbsp? # Base_queryset είναι ένα queryset που περιέχει όλα τα αντικείμενα που είναι
& Nbsp? # Προσβάσιμο από το API:
& Nbsp? Base_queryset = Widget.objects.all ()
& Nbsp? # Serialize_fields είναι μια λίστα των πεδίων μοντέλο που θέλετε να σταλεί
& Nbsp? # Σε resonses JSON σας:
& Nbsp? Serialize_fields = ("id", «όνομα», «περιγραφή», «created_at»)
Σε MyApp / urls.py:
από myapp.views WidgetView εισαγωγής
# Δημιουργία url πρότυπα για τα δύο «συλλογές» και μεμονωμένα αντικείμενα:
urlpatterns = πρότυπα ('',
& Nbsp? Url (r '^ widgets », WidgetView.as_view ()),
& Nbsp? Url (r »; ^ widgets / (Ρ d +)», WidgetView.as_view ()),
)
Εάν θέλετε να εκτελέσετε τις δοκιμές djangbone, θα πρέπει να προσθέσετε "djangobone" για να INSTALLED_APPS σας, και να τρέξει python δοκιμή manage.py djangbone. Οι εξετάσεις αυτές χρησιμοποιούν django.contrib.auth, έτσι ώστε η εφαρμογή θα πρέπει επίσης να είναι σε INSTALLED_APPS σας για τις δοκιμές στην εργασία.
Χειρισμός POST και PUT αιτήματα
Backbone.sync χρησιμοποιεί τις αιτήσεις POST, όταν δημιουργούνται νέα αντικείμενα, και να θέσει αιτήματα όταν αλλάζουν αντικείμενα. Αν θέλετε να υποστηρίξει αυτές τις μεθόδους HTTP, θα πρέπει να καθορίσετε ποια μορφή τάξεις να χρησιμοποιήσετε για επικύρωση για κάθε τύπο αίτησης.
Για να το κάνετε αυτό, θα πρέπει να δώσει BackboneAPIView έχουν add_form_class (POST) και edit_form_class (put) χαρακτηριστικά. Συνήθως θα θελήσετε να χρησιμοποιήσετε ένα ModelForm για τους δύο, αλλά ανεξάρτητα από αυτό, η μέθοδος κάθε φόρμας Αποθήκευση () θα πρέπει να επιστρέψει το παράδειγμα το μοντέλο που δημιουργήθηκαν ή τροποποιήθηκαν.
Εδώ είναι ένα παράδειγμα (υποθέσουμε AddWidgetForm και EditWidgetForm είναι και οι δύο ModelForms):
από djangbone.views BackboneAPIView εισαγωγής
από myapp.models Widget εισαγωγής
από myapp.forms εισαγωγή AddWidgetForm, EditWidgetForm
κατηγορία WidgetView (BackboneAPIView):
& Nbsp? Base_queryset = ...
& Nbsp? Serialize_fields = ...
& Nbsp? Add_form_class = AddWidgetForm # χρησιμοποιούνται για τις αιτήσεις POST
& Nbsp? Edit_form_class = EditWidgetForm # χρησιμοποιούνται για τις αιτήσεις PUT
Εάν χρειάζεστε πρόσβαση στο αντικείμενο αίτηση στις τάξεις φόρμα σας (ίσως να αποθηκεύσετε request.user με το μοντέλο σας, ή να εκτελέσουν επιπλέον επικύρωση), προσθέστε μια μέθοδο set_request () σε κατηγορίες φόρμα σας ως εξής:
κατηγορία AddWidgetForm (ModelForm):
& Nbsp? Τάξη Μέτα:
& Nbsp? Μοντέλο = Widget
& Nbsp? Def set_request (self, αίτηση):
& Nbsp? Self.request = Ζήτηση
& Nbsp? # Τώρα έχετε πρόσβαση σε self.request σε καθαρό () και να σώσει ()
Σελιδοποίηση
Αν θέλετε να περιορίσετε τον αριθμό των στοιχείων που επιστρέφονται για μια συλλογή, μπορείτε να ενεργοποιήσετε την βασική σελιδοποίηση με page_size χαρακτηριστικό BackboneAPIView του. Ρυθμίστε το σε ένα ακέραιο και παίρνει χωρίς αναγνωριστικό θα σελιδοποίηση. Η παράμετρος προεπιλογή GET είναι "π", αλλά μπορείτε να παρακάμψετε αυτό με BackboneAPIView.page_param_name.
Προσαρμογή
Υπάρχει μια αξιοπρεπή ευκαιρία που θα θέλετε να τυλίξετε BackboneAPIView υποκατηγορία σας με πρόσθετες λειτουργίες, για παράδειγμα, μόνο για να επιτρέψει εγγεγραμμένους χρήστες να έχουν πρόσβαση σε αυτή την άποψη. Μπορείτε να χρησιμοποιήσετε method_decorator Django για την αποστολή BackboneAPIView του () μέθοδος για να το κάνετε αυτό ως εξής:
από django.contrib.auth.decorators εισαγωγή login_required
από django.utils.decorators method_decorator εισαγωγής
κατηγορία WidgetView (BackboneAPIView):
& Nbsp? ...
& Nbsp?method_decorator (Login_required)
& Nbsp? Def αποστολής (self, αίτημα, * args, ** kwargs):
& Nbsp? Επιστροφή σούπερ (WidgetView, αυτο) .dispatch (* args, ** kwargs)
Ίσως επίσης να θέλετε να μεταβάλλεται το base_queryset ανάλογα με την απαίτηση (ή μια επιπλέον παράμετρο url). Μπορείτε επίσης να παρακάμψετε αποστολής () για να το κάνετε αυτό, για παράδειγμα:
κατηγορία WidgetView (BackboneAPIView):
& Nbsp? Base_queryset = Widgets.objects.all ()
& Nbsp? Def αποστολής (self, αίτημα, * args, ** kwargs):
& Nbsp? Αν request.method σε [«PUT ',' Διαγραφή ']:
& Nbsp? Self.base_queryset = Widgets.objects.filter (ιδιοκτήτης = request.user)
& Nbsp? Επιστροφή σούπερ (WidgetView, αυτο) .dispatch (* args, ** kwargs)
Μια σημείωση για CSRF Προστασίας
Backbone.sync στέλνει δεδομένα POST αίτημα ως JSON, το οποίο δεν λειτουργεί τόσο καλά με το Django ενσωματωμένο CSRF middleware (ο τελευταίος αναμένει δεδομένα POST μορφή κωδικοποιημένων). Ως αποτέλεσμα, αν χρησιμοποιείτε το middleware CSRF, θα θελήσετε να είτε:
1. Τυλίξτε τη μέθοδο αποστολής BackboneAPIView σας με τον διακοσμητή csrf_exempt να απενεργοποιήσετε CSRF προστασία, ή ...
2. (συνιστάται) σε JavaScript, ρυθμίσετε ajax μέθοδος jQuery να στείλει πάντα την κεφαλίδα HTTP X-CSRFToken. Δες τις οδηγίες Django CSRF για έναν τρόπο για να το κάνει, ή αν έχετε {%}% csrf_token κάπου στο πρότυπό σας Django μπορείτε να χρησιμοποιήσετε κάτι σαν:
& Nbsp? // Ρύθμιση $ .ajax να στείλετε πάντα μια κεφαλίδα X-CSRFToken:
& Nbsp? Var csrfToken = $ («είσοδος [name = csrfmiddlewaretoken]») val ().?
& Nbsp? $ (Έγγραφο) .ajaxSend (λειτουργία (ε, XHR, ρυθμίσεις) {
& Nbsp? Xhr.setRequestHeader («X-CSRFToken», csrfToken)?
& Nbsp?})?
Παραδοχές
Djangbone κάνει μερικές υποθέσεις σχετικά με τα μοντέλα σας για επαγγελματικούς λόγους:
- Το μοντέλο σας έχει έναν ακέραιο πρωτεύον κλειδί με το όνομα «ID»
Εναλλακτικές
Djangbone έχει σχεδιαστεί για να είναι ένας απλός τρόπος για να σε συνέχειες τα μοντέλα σας σε JSON με έναν τρόπο που λειτουργεί με Backbone. Δεν προσπαθεί να είναι ένα γενικευμένο σχήμα-αγνωστικιστής γεννήτρια API. Εάν αυτό είναι αυτό που ψάχνετε, μάλλον θα θέλετε να πάτε με κάτι σαν Django-tastypie ή Django-εμβόλου αντ 'αυτού.
Αν είστε ήδη χρησιμοποιούν Django-tastypie, ή να ψάχνουν για μια πιο πλήρεις δυνατότητες backend API από Djangbone παρέχει, μπορεί να θέλετε να εξετάσει την ραχοκοκκαλιά tastypie, η οποία υπερισχύει Backbone.sync (μέσω JavaScript) με έναν τρόπο που λειτουργεί πολύ καλά . με tastypie
Απαιτήσεις :
- Python
- Django
Τα σχόλια δεν βρέθηκε