وdjangbone هو التطبيق صغير جانغو الذي يجعل من السهل للعمل مع ال frontends Backbone.js & nbsp؛ يمكنك وبشكل أكثر تحديدا، فإنه يسمح لك لبناء بسرعة الخلفية التي تعمل مع تنفيذ Backbone.sync الافتراضية.
يوفر Djangbone جهة نظر واحدة على أساس الطبقة مجردة (BackboneAPIView)، والتي تعطيك السنانير لتخصيصه بسهولة.
مثال للاستخدام
بعد تحميل / تركيب djangbone، كل ما عليك القيام به هو:
1. الفئة الفرعية BackboneAPIView، وتعيين base_queryset وserialize_fields الصفات.
2. سلك يصل فئة فرعية الرأي في urlconf الخاص بك.
في اسم التطبيق / views.py:
من القطعة استيراد myapp.models
من djangbone.views BackboneAPIView استيراد
الطبقة WidgetView (BackboneAPIView):
على & nbsp؛ # base_queryset هو queryset الذي يحتوي على كافة الكائنات التي هي
على & nbsp؛ # يمكن الوصول إليها من قبل API:
على & nbsp؛ base_queryset = Widget.objects.all ()
على & nbsp؛ serialize_fields # هي قائمة من حقول النموذج الذي تريد أن ترسل
على & nbsp؛ # في االستجابات JSON الخاص بك:
على & nbsp؛ serialize_fields = ('الهوية'، 'اسم'، 'وصف'، 'created_at')
في اسم التطبيق / urls.py:
من WidgetView استيراد myapp.views
# إنشاء أنماط URL لكل من "المجموعات" والعناصر واحد:
urlpatterns = أنماط (''،
على & nbsp؛ رابط (ص '^ الحاجيات، WidgetView.as_view ())،
على & nbsp؛ رابط (ص '؟ ^ الحاجيات / (P د +)'، WidgetView.as_view ())،
)
إذا كنت ترغب في تشغيل الاختبارات djangbone، سوف تحتاج إلى إضافة "djangobone" لINSTALLED_APPS الخاص بك، وتشغيل الثعبان اختبار manage.py djangbone. الاختبارات تستخدم django.contrib.auth، لذلك سوف تحتاج أيضا إلى أن التطبيق ليكون في INSTALLED_APPS الخاص للاختبارات إلى العمل.
التعامل مع البريد وPUT طلبات
يستخدم Backbone.sync طلبات POST عندما يتم إنشاء كائنات جديدة، ووضع طلبات عندما يتم تغيير الكائنات. إذا كنت ترغب في دعم هذه الأساليب HTTP، تحتاج إلى تحديد أي شكل الطبقات لاستخدامها في التحقق من صحة لكل نوع الطلب.
للقيام بذلك، وإعطاء ينبغي أن يكون BackboneAPIView add_form_class (POST) وedit_form_class (PUT) الصفات. عادة سوف تحتاج إلى استخدام ModelForm على حد سواء، ولكن بغض النظر، يجب أن طريقة كل النموذج حفظ () إرجاع المثال نموذج التي تم إنشاؤها أو تعديلها.
وإليك مثال (تفترض AddWidgetForm وEditWidgetForm كلاهما ModelForms):
من djangbone.views BackboneAPIView استيراد
من القطعة استيراد myapp.models
من 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؛ نموذج = القطعة
على & nbsp؛ مواطنه set_request (النفس، الطلب):
على & nbsp؛ self.request = الطلب
على & nbsp؛ # الآن لديك الوصول إلى self.request في نظيفة () وحفظ ()
ترقيم الصفحات
إذا كنت ترغب في الحد من عدد البنود وعاد لمجموعة، يمكنك تشغيل ترقيم الصفحات الأساسية مع السمة page_size BackboneAPIView ل. تعيين إلى عدد صحيح ويحصل بدون سيتم مرقم صفحات معرف. المعلمة GET الافتراضية هي "ع"، ولكن يمكنك تجاوز هذا مع BackboneAPIView.page_param_name.
التخصيص
هناك فرصة لائق أن عليك أن ترغب في التفاف فئة فرعية BackboneAPIView الخاص بك مع وظائف إضافية، على سبيل المثال السماح فقط للمستخدمين المسجلين للوصول إلى هذا الرأي. يمكنك استخدام method_decorator جانغو على ارسال BackboneAPIView ل() طريقة للقيام بذلك على النحو التالي:
من django.contrib.auth.decorators استيراد login_required
من django.utils.decorators استيراد method_decorator
الطبقة WidgetView (BackboneAPIView):
على & nbsp؛ ...
على & nbsp؛method_decorator (login_required)
على & nbsp؛ ارسال مواطنه (النفس، طلب، * وسائط **، kwargs):
على & nbsp؛ عودة السوبر (WidgetView، النفس) .dispatch (* سائط **، kwargs)
قد ترغب أيضا لتغيير base_queryset اعتمادا على الطلب (أو معلمة URL إضافية). يمكنك أيضا تجاوز ارسال () للقيام بذلك، على سبيل المثال:
الطبقة WidgetView (BackboneAPIView):
على & nbsp؛ base_queryset = Widgets.objects.all ()
على & nbsp؛ ارسال مواطنه (النفس، طلب، * وسائط **، kwargs):
& nbsp؛ إذا request.method في ['طرح'، 'حذف']:
على & nbsp؛ self.base_queryset = Widgets.objects.filter (مالك = request.user)
على & nbsp؛ عودة السوبر (WidgetView، النفس) .dispatch (* سائط **، kwargs)
ملاحظة حول حماية CSRF
Backbone.sync يرسل بيانات طلب POST كما JSON، الذي لا يعمل بشكل جيد مع جانغو الذي بني في CSRF الوسيطة (وهذا الأخير يتوقع البانات ترميز النموذج). ونتيجة لذلك، إذا كنت تستخدم الوسيطة CSRF، فأنت تريد أن إما:
1. التفاف طريقة الإرسال BackboneAPIView الخاص بك مع الديكور csrf_exempt لتعطيل حماية CSRF، أو ...
2. (موصى به) في جافا سكريبت، وتكوين طريقة مسج لاياكس لارسال دائما رأس HTTP X-CSRFToken. انظر مستندات جانغو CSRF لواحد طريقة للقيام بذلك، أو إذا كان لديك {٪ csrf_token٪} في مكان ما في قالب جانغو الخاص بك يمكنك استخدام شيء من هذا القبيل:
على & nbsp؛ // الإعداد $ .ajax لإرسال دائما على رأس X-CSRFToken:
على & nbsp؛ فار csrfToken = $ ('المدخلات [اسم = csrfmiddlewaretoken]') فال ()؛
ونبسب؛ $ (الوثيقة) .ajaxSend (وظيفة (ه، XHR، وإعدادات) {
على & nbsp؛ xhr.setRequestHeader ('X-CSRFToken، csrfToken)؛
على & nbsp؛})؛
الافتراضات
Djangbone يجعل بعض الافتراضات حول النماذج الخاصة بك من أجل العمل:
- النموذج الخاص بك لديه المفتاح الأساسي عدد صحيح اسمه "معرف"
البدائل
تم تصميم Djangbone ليكون وسيلة بسيطة لتسلسل النماذج الخاصة بك إلى JSON في الطريقة التي تعمل مع العمود الفقري. انها ليست يحاول أن يكون المعمم، بتنسيق الملحد مولد API. اذا كان هذا ما كنت أبحث عنه، وربما كنت تريد أن تذهب مع شيء من هذا القبيل جانغو-tastypie أو جانغو مكبس بدلا من ذلك.
إذا كنت تستخدم بالفعل جانغو-tastypie، أو يبحثون عن الخلفية API أكثر كامل المواصفات من توفر Djangbone، قد ترغب في النظر في العمود الفقري-tastypie والذي يتجاوز Backbone.sync (عبر جافا سكريبت) في الطريقة التي يعمل بشكل جيد مع tastypie
المتطلبات:.
بيثون
جانغو
لم يتم العثور على التعليقات