مقدمة إلى إطار Django REST: التطوير بالأمثلة

نشرت: 2020-10-05

يتم توزيع إطار عمل Django REST على نطاق واسع كحزمة Python قياسية قد يحتاجها المستخدمون للبدء في تطوير RESTful APIs. إنه متطور وقوي وسهل الاستخدام بشكل مثير للدهشة ويقدم إصدارًا جذابًا وقابل للتصفح لواجهات برمجة التطبيقات. يوفر إطار عمل Django REST خيار إرجاع كائنات JSON. يوفر إطار العمل هذا تسلسلاً قويًا للنموذج ويعرض البيانات باستخدام طرق العرض الأساسية القائمة على الوظائف تمامًا في عارض REST بالكامل. تعرف على المزيد حول إطار عمل Django REST أدناه:

جدول المحتويات

ما هو إطار Django REST؟

يعد إطار عمل Django REST مجموعة أدوات مرنة وقوية تسهل على المطورين إنشاء واجهات برمجة تطبيقات الويب. كما يوفر أيضًا عروض عامة ومسلسلات قائمة على الفئة لواجهة برمجة التطبيقات. لكونه رمز مصدر ، يتم اختصاره كـ DRF ، والذي يمثل مكتبة Python لتطوير واجهات برمجة تطبيقات الويب. كما في هذه المقالة ، نتحدث عن تطوير واجهات برمجة التطبيقات مع إرشادات خطوة بخطوة.

ولكن قبل البدء في استخدام الدليل ، من المهم أن نفهم سبب أهمية إطار العمل. تسمح العديد من الأطر المتاحة للمطورين ببناء واجهات برمجة التطبيقات لتطبيقات الكتلة الخاصة بهم بسهولة ، ولكن يُفضل إطار عمل Django REST. هذا الإطار مناسب للاستخدام بعدة طرق ويقدم المزايا المذكورة أدناه-

  • يوفر لمتصفحات الويب واجهة برمجة تطبيقات قوية ، وهو فوز كبير للمطورين
  • لديها سياسات مصادقة بما في ذلك حزم OAuth1 و OAuth2 وما إلى ذلك
  • يدعم معالج التسلسل الموجود فيه مصادر بيانات ORM وغير ORM
  • يحتوي هذا الإطار على وثائق واسعة النطاق ويقدم دعمًا كبيرًا للمجتمع
  • يتم استخدامه والموثوق به من قبل منصات رائعة ، بما في ذلك Mozilla و Heroku و RedHat وما إلى ذلك.

قراءة: تطبيقات Django: كل ما تحتاج لمعرفته حول

تعيين تطوير إطار عمل Django REST

بالنسبة للمبتدئين ، يجب عليك تثبيت تبعيات Python لنظام التشغيل. إذا كنت تستخدم نظام Windows الأساسي ، فيمكنك بسهولة تثبيت نظام Linux الأساسي كنظام تشغيل ثانوي باستخدام مربع افتراضي أو أمر يدوي. لمتابعة إطار العمل ، يمكنك استخدام أدوات إدارة Python الفعالة والمريحة.

معظم الأدوات هي مساعد go-to. إنها تسمح للمطورين بتغيير إصدارات Python بسرعة ، وتعيين إصدارات خاصة بالمشروع ، وإدارة البيئة الافتراضية ، وتثبيت إصدارات متعددة على النظام. إذا كنت تستخدم أنظمة تشغيل Linux أو Mac ، فسيكون من السهل تثبيته.

بمساعدة إطار عمل Django REST ، يمكننا تحويل تطبيق غير RESTful إلى تطبيق RESTful. هذا يشمل الإجراءات المذكورة أدناه-

إعداد DRF

لإعداد DRF ، يجب عليك تثبيت-

الصدف

تثبيت djangorestframework

تجميد $ pip> requirements.txt

إعدادات التحديث: py:

بايثون

INSTALLED_APPS = (

"django.contrib.admin"،

"django.contrib.auth"،

"django.contrib.contenttypes" ،

"django.contrib.sessions"،

"django.contrib.messages"،

"django.contrib.staticfiles"،

'حديث'،

"rest_framework"

)

هيكل مريح

في تطوير RESTful API ، تمثل نقاط النهاية هيكلها ووصول المستخدم من التطبيق بمساعدة طرق مثل GET و PUT و POST و DELETE. يتم تنظيم نقاط النهاية هذه منطقيًا حول العنصر والمجموعات ، وكلاهما يتم حسابهما كموارد. إذا كان هناك مصدر واحد ، فسيتم استخدام الروابط المقابلة كعناوين URL للعناصر والمجموعات.

احصل على

بريد

وضع

حذف

/المشاركات/

إظهار كافة المشاركات

إضافة وظيفة جديدة

تحديث جميع المشاركات

حذف كافة المشاركات

/ المشاركات / <id>

إظهار <معرف>

غير متاح

تحديث <id>

حذف المعرف

المسلسلات و المشاهدات

اللبنة الأساسية لإطار عمل Django REST هي المتسلسلة ، ويتم استخدامها للتوسع في تمثيل سجلات البيانات المختلفة بناءً على نماذج Django. المسلسلون هم فئة Python القياسية التي يمكنها أن ترث سلوك النموذج من إطار العمل.

داخل فئة المتسلسلات ، توجد مجموعات حقول منفصلة تستخدم أنواع البيانات من حزمة نفس إطار العمل. كما لاحظوا أوجه التشابه بين الإطار والطبقات. لا تفكر فئات Serializer في حد ذاتها ، ويتم دمجها مع طرق العرض التي تدير الجزء الأكبر من منطق خدمة REST. علاوة على ذلك ، فإنه يستخدم فئات المسلسل لتحويل البيانات. على سبيل المثال ، طريقة عرض Django العادية هي-

من coffeehouse.stores.models import Store

from coffeehouse.stores.serializers import StoreSerializer

من rest_framework.decorators استيراد api_view

من rest_framework.response استجابة الاستيراد

api_view (['GET'، 'POST'، 'DELETE'])

def rest_store (طلب):

إذا كان request.method == 'احصل على':

مخازن = Store.objects.all ()

المتسلسل = StoreSerializer (مخازن ، كثيرة = صحيح)

عودة الاستجابة (serializer.data)

elif request.method == 'POST':

… # logic لعملية HTTP POST

elif request.method == 'حذف':

… # logic لعملية حذف HTTP

المشاهدات المستندة إلى الفئة

بمساعدة المشاهدات المستندة إلى الفصل ، يوفر إطار عمل Django REST الوصول إلى وظائف المستخدمين العليا والمعقدة. تقدم العروض المستندة إلى الفصل وظائف فئات Python الحقيقية الكاملة وتسمح لعروض Django بالعمل بسهولة بمساعدة مبادئ البرمجة الموجهة للكائنات والتي تؤدي إلى إعادة استخدام أكبر إلى جانب أوقات التنفيذ القصيرة.

تسلط وجهات النظر المستندة إلى فئة Django الضوء على نهج قوي لبناء وجهات نظر Django ، وهي أيضًا بديل للطرق المستخدمة لبناء واجهات برمجة التطبيقات. لتطوير وجهة نظر قائمة على الفصل ، من المهم إنشاء فئة يمكن أن ترث من إحدى الفئات الأخرى. علي سبيل المثال:

# views.py

من Django.views.generic استيراد TemplateView

فئة AboutIndex (TemplateView):

template_name = 'index.html'

def get_context_data (ذاتي ، ** kwargs):

# ** kwargs يحتوي على قيم تهيئة سياق الكلمات الرئيسية (إن وجدت)

# تنفيذ قاعدة الاتصال للحصول على سياق

السياق = super (AboutIndex، self) .get_context_data (** kwargs)

# أضف بيانات السياق لتمريرها إلى القالب

سياق ['aboutdata'] = "بيانات مخصصة"

سياق العودة

# urls.py

من coffeehouse.about.views استيراد AboutIndex

من مسار استيراد django.urls

أنماط عنوان url = [

المسار ('about / index /'، AboutIndex.as_view ()، {'onsale': True}) ،

الخروج: أفضل 12 أسئلة وأجوبة مقابلة Django للمبتدئين

تحديث طرق العرض

لتلائم بنية التطبيق RESTful ، من المهم إعادة تشكيل العروض الحالية. يمكنك التعليق خارج هذه الآراء وإضافتها كـ-

بايثون

من django.shortcuts استيراد تصيير

من django.http استيراد HttpResponse

من rest_framework.decorators استيراد api_view

من rest_framework.response استجابة الاستيراد

من talk.models استيراد آخر

من talk.serializers استيراد PostSerializer

من talk.forms استيراد PostForm

def home (request):

tmpl_vars = {'نموذج': PostForm ()}

إرجاع العرض (request، 'talk / index.html'، tmpl_vars)

api_view (['GET'])

def post_collection (طلب):

إذا كان request.method == 'احصل على':

المشاركات = Post.objects.all ()

المتسلسل = PostSerializer (المشاركات ، كثير = صحيح)

عودة الاستجابة (serializer.data)

api_view (['GET'])

def post_element (طلب ، pk):

يحاول:

post = Post.objects.get (pk = pk)

باستثناء Post.DoesNotExist:

إرجاع HttpResponse (الحالة = 404)

إذا كان request.method == 'احصل على':

متسلسل = PostSerializer (آخر)

عودة الاستجابة (serializer.data)

تفسير

  • في التعليمات الواردة أعلاه ، يحلل مصمم الديكورapi_view طلب HTTP المقابل ، والذي يتم تمريره إلى وظيفة العرض.
  • الآن إما أن يستخدم العرض منشورًا واحدًا إذا كان لعنصر أو يلتقط البيانات بالكامل إذا كان للمجموعة
  • أخيرًا ، يتم الآن تسلسل البيانات إلى JSON وإعادتها وفقًا لذلك

واجهة برمجة تطبيقات الويب القابلة للتصفح أو عنوان URL المحدث

بعض عناوين URL المحدثة لـ Python هي:

# عناوين URL نقاش

من أنماط الاستيراد django.conf.urls ، URL

urlpatterns = أنماط (

'talk.Views'،

url (r '^ $'، 'home')،

# api

url (r '^ api / v1 / posts / $'، 'post_collection')،

url (r '^ api / v1 / posts / (؟ P <pk> [0-9] +) $'، 'post_element')

)

Refactor لتكامل API RESTful

إنه يشمل طرق HTTP الرئيسية مثل-

احصل على

التحميل الأولي للصفحة ، من المهم عرض المنشورات ، وللقيام بذلك يمكنك إضافة هذا الطلب:

load_posts ()

// تحميل جميع المشاركات عند تحميل الصفحة

وظيفة load_posts () {

.ajax $ ({

url: “api / v1 / posts /” ، // نقطة النهاية

اكتب: “GET” ، // طريقة http

// التعامل مع استجابة ناجحة

النجاح: function (json) {

لـ (var i = 0؛ i <json.length؛ i ++) {

console.log (json [i])

$ (“# talk”). prepend (“<li id ​​= 'post -“ + json [i] .id + ”'> <strong>” + json [i] .text + ”</strong> - <em>“ + json [i] .author + ”</em> - <span>" + json [i] .created +

"</span> - <a id='delete-post- Coco+json[i].id+”'> delete me </a> </li>”)؛

}

} ،

// التعامل مع استجابة غير ناجحة

خطأ: الوظيفة (xhr ، errmsg ، err) {

$ ('# results'). html (“<div class = 'alert-box alert radius' data-alert> عفوًا! لقد واجهنا خطأً:" + errmsg +

”<a href='#' class='close'> & times؛ </a> </div>”)؛ // إضافة الخطأ إلى دوم

console.log (xhr.status + ":" + xhr.responseText) ؛ // تقديم معلومات أكثر قليلاً عن الخطأ لوحدة التحكم

}

}) ؛

} ؛

بريد

تتم إدارة طلبات POST بطريقة مماثلة ويمكنك اختبار ذلك عن طريق تحديث طرق العرض. يمكنك تحديث الوظيفة post_collection () في views.py:

api_view (['GET'، 'POST'])

def post_collection (طلب):

إذا كان request.method == 'احصل على':

المشاركات = Post.objects.all ()

المتسلسل = PostSerializer (المشاركات ، كثير = صحيح)

عودة الاستجابة (serializer.data)

elif request.method == 'POST':

data = {'text': request.DATA.get ('the_post')، 'author': request.user.pk}

متسلسل = PostSerializer (بيانات = بيانات)

إذا كان serializer.is_valid ():

serializer.save ()

عودة الاستجابة (serializer.data، status = status.HTTP_201_CREATED)

عودة الاستجابة (serializer.errors، status = status.HTTP_400_BAD_REQUEST)

اقرأ أيضًا: راتب Django Developer في الهند

الخط السفلي

جزء REST لإطار عمل Django REST الفعلي بسيط جدًا وكل ما عليك فعله هو تحديث وظيفة عنصر النشر للتعامل مع الطلب. إذا كان لا يزال لديك أي استفسارات ، فهناك عدد من أطر عمل Django REST وموارد الارتجال.

إذا كنت مهتمًا بمعرفة المزيد حول Django ولغات وأدوات أخرى للمطورين كاملة المكدس ، تحقق من upGrad & IIIT-B's دبلوم PG في تطوير البرامج الكامل المكدس المصمم للمهنيين العاملين ويقدم أكثر من 500 ساعة من التدريب الصارم ، أكثر من 9 مشاريع ، ومهام ، وحالة خريجي IIIT-B ، ومشاريع التخرج العملية العملية والمساعدة في العمل مع الشركات الكبرى.

استعد لمهنة المستقبل

برنامج UPGRAD و IIIT-BANGALORE دبلوم PG في تطوير برامج المكدس الكامل
سجل اليوم