في سياق استخدام إطار العمل Django و Django Rest Framework، يطرأ أحيانًا التحدي عند محاولة استخدام Django Messages Framework لعرض رسائل بعد أداء عملية معينة، مثل إضافة سجل جديد باستخدام ModelViewSet
في Django Rest Framework.
في الكود الذي قدمته، قمت بمحاولة استخدام messages.success
لعرض رسالة نجاح بعد إضافة نطاق جديد، ولكن واجهت خطأ من نوع TypeError
يشير إلى أن الوسيطة التي يتم تمريرها لدالة add_message()
يجب أن تكون من نوع HttpRequest
، وليس Request
.
-
برمجة عبر الشبكة: جسر التواصل الحديث21/11/2023
-
ربط حاوية Docker بتخزين S3: أفضل الممارسات05/02/2024
-
تكامل واجهة المستخدم المشفرة مع Perl.01/04/2024
لحل هذا التحدي، يمكنك تعديل الكود بطريقة تمكنك من الوصول إلى HttpRequest
داخل create()
في ModelViewSet
. يمكنك استخدام الخاصية request
المتاحة داخل Request
في Django Rest Framework للوصول إلى HttpRequest
. فيما يلي كود محدث يوضح كيفية القيام بذلك:
pythonfrom rest_framework.response import Response
from rest_framework import status
from rest_framework.decorators import action
from django.contrib import messages
from django.http import HttpResponseRedirect
from django.urls import reverse
class DomainModelViewSet(ModelViewSet):
@action(detail=False, methods=['post'])
def create_and_add_message(self, request):
serializer = self.get_serializer(data=request.data)
serializer.is_valid(raise_exception=True)
self.perform_create(serializer)
# استخدام HttpRequest من Django Rest Framework Request
django_request = self.request._request
messages.success(django_request, "Domain Added.")
return Response(serializer.data, status=status.HTTP_201_CREATED)
في هذا الكود، تم استخدام الديكورات (@action
) لإضافة إجراء إضافي يسمى create_and_add_message
، الذي يقوم بإجراء إضافة النطاق وإرسال رسالة نجاح. يتم استخدام self.request._request
للوصول إلى HttpRequest
من داخل Request
في Django Rest Framework.
بهذا الشكل، يمكنك تحقيق التكامل بين Django Messages Framework و Django Rest Framework بنجاح بعد إجراء الإضافات أو التعديلات اللازمة في الكود.
المزيد من المعلومات
في هذا السياق، يجدر بنا التعمق أكثر في المفاهيم والتقنيات التي تم استخدامها في الكود السابق. لنفهم بشكل أوسع كيف تم حل التحدي وكيف يمكن تحسينه أكثر.
أولًا وقبل كل شيء، يتعلق الكود بالتعامل مع Django و Django Rest Framework، وهما إطاري عمل قويين يسهلان تطوير تطبيقات الويب باستخدام لغة Python. Django Rest Framework يعمل كامتداد لـ Django ويوفر أدوات لبناء واجهات برمجة تطبيقات (API) بشكل فعال.
في الكود، تم استخدام ModelViewSet
وهي إحدى الفئات المقدمة من Django Rest Framework لتسهيل إنشاء نهج RESTful CRUD (Create, Retrieve, Update, Delete) لنماذج Django. تمت معالجة الطلبات باستخدام الوظيفة create()
التي تستخدم لإنشاء مورد جديد.
تم توسيع هذا بواسطة إضافة إجراء خاص باستخدام الديكورات (@action
). الإجراء يقوم بالإضافة إلى النطاق باستخدام المعلومات المرسلة في الطلب، ثم يقوم بإرسال رسالة نجاح باستخدام Django Messages Framework.
الخطوة المهمة هي الحصول على HttpRequest
من Django Rest Framework Request
. هنا تم استخدام self.request._request
للوصول إلى الكائن HttpRequest
المطلوب لاستخدام messages.success()
بشكل صحيح.
عمومًا، يمكن أيضًا استخدام هذا النمط لتحقيق التكامل بين Django و Django Rest Framework في سياقات أخرى. يجسد هذا الحل إحدى الطرق الفعّالة للتعامل مع النقاط التكاملية بين مكتبات Django المختلفة بطريقة تجعل الكود أكثر وضوحًا وإدارةً.