تطوير الويب باستخدام Django: بناء تطبيقات قابلة للتطوير وآمنة وقابلة للصيانة

سنتكلم عن تطوير الويب المتقدم باستخدام Django. سنتعلم كيفية استخدام مفاهيم عالية المستوى مثل البرامج الوسيطة المخصصة و العروض المستندة إلى الفصل واستعلام قاعدة البيانات المتقدمة وواجهات برمجة التطبيقات RESTful.

وبحلول نهاية هذا الدرس، سيكون لديك فهم أعمق لإمكانيات جانغو وستكون جاهزًا للتعامل مع تطبيقات الويب المعقدة.

تخصيص البرامج الوسيطة

البرامج الوسيطة (middleware) هي وحدات برمجية تعمل بين العميل والخادم.

في Django، تعد البرامج الوسيطة أداة قوية يمكن استخدامها لإضافة دوال إضافية إلى تطبيقات Django.

يمكن استخدام البرامج الوسيطة ل:

  • التحقق من صحة الطلبات الواردة
  • تسجيل أنشطة المستخدم
  • توفير الأمان
  • تحسين أداء التطبيق
  • إضافة ميزات جديدة

تأتي Django مع عدد من البرامج الوسيطة المدمجة، مثل:

  • AuthenticationMiddleware: يتحقق من صحة المستخدمين ويربطهم بالطلبات.
  • SessionMiddleware: يحفظ حالة الجلسة للمستخدمين بين الطلبات.
  • CommonMiddleware: يوفر ميزات عامة، مثل تحويل تنسيقات الملفات.

يمكن للمطورين إنشاء برامج وسيطة مخصصة لتلبية احتياجات تطبيقاتهم الخاصة.

كيفية إنشاء برنامج وسيط مخصص

لإنشاء برنامج وسيط مخصص، تحتاج إلى إنشاء فئة ترث من MiddlewareMixin. و يجب أن تحتوي الفئة على طريقة واحدة فقط، وهي get_response().

في طريقة get_response()، يمكنك تنفيذ التعليمات البرمجية التي تريد تنفيذها قبل أو بعد استدعاء تابع العرض.

إليك مثال على برنامج وسيط مخصص يتحقق من صحة عنوان الـ IP للمستخدم:

from django.middleware.common import MiddlewareMixin

class IPMiddleware(MiddlewareMixin):

    def get_response(self, request):
        # تحقق من صحة عنوان الـ IP للمستخدم
        if request.META['REMOTE_ADDR'] == '127.0.0.1':
            # امنح المستخدم الوصول
            return super().get_response(request)
        else:
            # رفض الوصول للمستخدم
            return HttpResponseForbidden()

كيفية إضافة برنامج وسيط إلى تطبيق Django

لإضافة برنامج وسيط إلى تطبيق Django، تحتاج إلى إضافته إلى قائمة MIDDLEWARE في ملف settings.py.

إليك مثال على كيفية إضافة برنامج وسيط إلى قائمة MIDDLEWARE:

MIDDLEWARE = [
    'django.middleware.common.CommonMiddleware',
    'myapp.middlewares.IPMiddleware',
]

ترتيب البرامج الوسيطة

يتم تنفيذ البرامج الوسيطة في ترتيب تنازلي من القائمة MIDDLEWARE. هذا يعني أن البرنامج الوسيط في أعلى القائمة سيتم تنفيذه أولاً، يليه البرنامج الوسيط التالي، وهكذا.

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

تطبيقات البرامج الوسيطة

هناك العديد من التطبيقات المختلفة التي يمكن استخدام البرامج الوسيطة لها. فيما يلي بعض الأمثلة:

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

العروض المستندة إلى الفئات

تعد العروض المستندة إلى الفئات في جانغو طريقة جديدة لإنشاء عروض في تطبيقات جانغو. تختلف العروض المستندة إلى الفئات عن العروض المستندة إلى الدوال في أنها تعتمد على الفئات بدلاً من الدوال.

هناك العديد من المزايا لاستخدام العروض المستندة إلى الفئات و هي:

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

كيفية إنشاء عرض مستند إلى فئة

لإنشاء عرض مستند إلى فئة، تحتاج إلى إنشاء فئة ترث من View. يجب أن تحتوي الفئة على تابع واحد فقط، وهو get().

من خلال التابع get()، يمكنك تنفيذ التعليمات البرمجية التي تريد تنفيذها عند استدعاء العرض.

إليك مثال على عرض مستند إلى فئة يعرض صفحة HTML بسيطة:

from django.views.generic import View

class MyView(View):

    def get(self, request):
        # احصل على بيانات من قاعدة البيانات
        data = ...

        # إنشاء صفحة HTML
        html = ...

        # إرسال الصفحة إلى العميل
        return HttpResponse(html)

كيفية إضافة عرض مستند إلى فئة إلى تطبيق Django

لإضافة عرض مستند إلى فئة إلى تطبيق Django، تحتاج إلى إضافته إلى قائمة VIEWS في ملف urls.py.

إليك مثال على كيفية إضافة عرض مستند إلى فئة إلى قائمة VIEWS:

from django.urls import path

from myapp.views import MyView

urlpatterns = [
    path('', MyView.as_view(), name='home'),
]

تطبيقات العروض المستندة إلى الفئات

هناك العديد من التطبيقات المختلفة التي يمكن استخدام العروض المستندة إلى الفئات لها. فيما يلي بعض الأمثلة:

  • إنشاء صفحات HTML بسيطة: يمكن استخدام العروض المستندة إلى الفئات لإنشاء صفحات HTML بسيطة.
  • عرض البيانات من قاعدة البيانات: يمكن استخدام العروض المستندة إلى الفئات لعرض البيانات من قاعدة البيانات.
  • تنفيذ العمليات الحسابية: يمكن استخدام العروض المستندة إلى الفئات لتنفيذ العمليات الحسابية.
  • التفاعل مع واجهة برمجة تطبيقات خارجية: يمكن استخدام العروض المستندة إلى الفئات للتفاعل مع واجهة برمجة تطبيقات خارجية.

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


توفر Django مجموعة متنوعة من أدوات الاستعلام عن قاعدة البيانات للوصول إلى البيانات المخزنة في قاعدة البيانات. تشمل هذه الأدوات:

  • QuerySet: هي فئة توفر طريقة بسيطة لتنفيذ استعلامات قاعدة البيانات.
  • ORM: هو إطار عمل يوفر طبقة إضافية من التجريد بين Django وقاعدة البيانات.
  • Raw SQL: يسمح لك بتنفيذ استعلامات SQL مباشرة في Django.

QuerySet

تعد QuerySet الطريقة الأساسية للاستعلام عن قاعدة البيانات في Django. توفر QuerySet مجموعة متنوعة من الأساليب لتحديد البيانات التي تريد إرجاعها.

فيما يلي بعض الأمثلة على كيفية استخدام QuerySet:

  • إرجاع جميع البيانات من جدول:
from django.dbmodels import QuerySet

queryset = Book.objects.all()

إرجاع البيانات من جدول بناءً على شرط:

from django.db.models import QuerySet

queryset = Book.objects.filter(title='The Django Book')

إرجاع البيانات من جدول مرتبة حسب العمود:

from django.db.models import QuerySet

queryset = Book.objects.order_by('title')

إرجاع البيانات من جدول مع عدد محدود من النتائج:

from django.db.models import QuerySet

queryset = Book.objects.limit(10)

ORM

يوفر ORM طبقة إضافية من التجريد بين Django وقاعدة البيانات. و يتيح لك ORM الوصول إلى البيانات المخزنة في قاعدة البيانات باستخدام نفس الواجهات التي تستخدمها لإنشاء نماذج Django.

فيما يلي بعض الأمثلة على كيفية استخدام ORM:

  • إنشاء كائن جديد:
from django.db.models import Model

class Book(Model):
    title = models.CharField(max_length=255)
    author = models.CharField(max_length=255)

book = Book(title='The Django Book', author='Drew Greenwell')
book.save()

تحديث كائن موجود:

from django.db.models import Model

class Book(Model):
    title = models.CharField(max_length=255)
    author = models.CharField(max_length=255)

book = Book.objects.get(id=1)
book.title = 'The Django Book, Second Edition'
book.save()

حذف كائن:

from django.db.models import Model

class Book(Model):
    title = models.CharField(max_length=255)
    author = models.CharField(max_length=255)

book = Book.objects.get(id=1)
book.delete()

Raw SQL

يسمح لك Raw SQL بتنفيذ استعلامات SQL مباشرة في Django. و يمكن أن يكون هذا مفيدًا إذا كنت بحاجة إلى تنفيذ استعلام قاعدة بيانات معقد أو غير مدعوم بواسطة QuerySet أو ORM.

فيما يلي مثال على كيفية استخدام Raw SQL:

from django.db import connection

cursor = connection.cursor()
cursor.execute('SELECT title, author FROM books')

for row in cursor.fetchall():
    print(row[0], row[1])

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

بالإضافة إلى الأساليب الأساسية للاستعلام عن قاعدة البيانات، توفر Django أيضًا مجموعة متنوعة من أدوات الاستعلام المتقدمة. تشمل هذه الأدوات:

  • استعلامات JOIN: تسمح لك باسترداد البيانات من جداول متعددة.
  • استعلامات GROUP BY: تسمح لك بتجميع البيانات حسب عمود أو أكثر.
  • استعلامات HAVING: تسمح لك بتصفية النتائج بناءً على مجموعة المجموعة.
  • استعلامات SUBQUERY: تسمح لك بتنفيذ استعلام داخل استعلام آخر.

بناء واجهات برمجة تطبيقات RESTful باستخدام Django Rest Framework

Django Rest Framework (DRF) إطار عمل ويب مفتوح المصدر يوفر أدوات لبناء واجهات برمجة تطبيقات RESTful API و هي واجهات برمجة تطبيقات تتبع مبادئ بنية نقل الحالة التمثيلية (REST).

يوفر DRF مجموعة متنوعة من الميزات التي تجعل من السهل بناء واجهات برمجة تطبيقات RESTful، بما في ذلك:

  • التمثيلات: يوفر DRF مجموعة متنوعة من التمثيلات لبياناتك، بما في ذلك JSON و XML و HTML.
  • التحقق من الصحة: يوفر DRF آليات للتحقق من صحة بيانات الطلبات الواردة.
  • الوصول: يوفر DRF أدوات للتحكم في وصول المستخدمين إلى بياناتك.
  • التسجيل: يوفر DRF أدوات للتسجيل والتوثيق.

إنشاء مشروع Django Rest Framework

لإنشاء مشروع Django Rest Framework، يمكنك استخدام أداة إنشاء المشاريع الافتراضية في Django.

django-admin startproject myproject

سيؤدي هذا إلى إنشاء مشروع Django جديد باسم “myproject”.

بعد إنشاء المشروع، تحتاج إلى تثبيت Django Rest Framework.

pip install djangorestframework

إضافة Django Rest Framework إلى المشروع

بعد تثبيت Django Rest Framework، تحتاج إلى إضافة المشروع إلى إعدادات Django.

INSTALLED_APPS = [
    ...
    'rest_framework',
]

إنشاء نموذج Django

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

from django.db import models

class Book(models.Model):
    title = models.CharField(max_length=255)
    author = models.CharField(max_length=255)

    def __str__(self):
        return self.title

إنشاء عرض Django Rest Framework

بعد إنشاء نموذج Django، يمكنك إنشاء عرض Django Rest Framework يعرض البيانات من النموذج.

from rest_framework import serializers
from rest_framework import viewsets

from .models import Book

class BookSerializer(serializers.ModelSerializer):
    class Meta:
        model = Book
        fields = ('title', 'author')

class BookViewSet(viewsets.ModelViewSet):
    queryset = Book.objects.all()
    serializer_class = BookSerializer

تسجيل عرض Django Rest Framework

بعد إنشاء عرض Django Rest Framework، تحتاج إلى تسجيله في إعدادات Django.

from .views import BookViewSet

REST_FRAMEWORK = {
    'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
    'PAGE_SIZE': 10,
    'DEFAULT_SCHEMA_CLASS': 'rest_framework.schemas.coreapi.AutoSchema',
}

API_ROOT_URLCONF = 'myproject.urls'

urlpatterns = [
    path('api/', include(API_ROOT_URLCONF)),
]

اختبار عرض Django Rest Framework

بمجرد تسجيل عرض Django Rest Framework، يمكنك اختباره باستخدام عميل RESTful.

curl -i http://127.0.0.1:8000/api/books

سيؤدي هذا إلى إرجاع جميع الكتب في قاعدة البيانات.

أفضل ممارسات الأمن و الحماية

يوفر Django مجموعة من الميزات التي تساعدك على حماية تطبيقاتك من الهجمات. ومع ذلك، من المهم اتباع أفضل ممارسات أمن الويب لضمان أمان تطبيقاتك بشكل كامل.

فيما يلي بعض أفضل ممارسات أمن الويب لتطبيقات Django:

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

فيما يلي بعض النصائح الإضافية لحماية تطبيقات Django:

  • قم بإجراء نسخ احتياطية من تطبيقاتك بانتظام. سيساعدك ذلك في استعادة تطبيقاتك إذا تعرضت للهجوم.
  • كن على دراية بالتهديدات الأمنية. اقرأ عن أحدث التهديدات الأمنية وكيفية حماية تطبيقاتك منها.

من خلال اتباع أفضل ممارسات أمن الويب، يمكنك حماية تطبيقات Django من الهجمات.


اكتشاف المزيد من بايثون العربي

اشترك للحصول على أحدث التدوينات المرسلة إلى بريدك الإلكتروني.

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *

Scroll to Top

اكتشاف المزيد من بايثون العربي

اشترك الآن للاستمرار في القراءة والحصول على حق الوصول إلى الأرشيف الكامل.

Continue reading