إضافة ملف robots.txt إلى موقع Django

“الروبوت” هو مصطلح عام لبرنامج آلي يقوم بأشياء مثل فحص الويب. تعتمد Google ومحركات البحث الأخرى على الروبوتات لفحص الإنترنت بشكل دوري. كما تقوم شركات أحدث مثل ChatGPT بفحص الإنترنت (ومصادر أخرى محمية بحقوق الطبع والنشر) للحصول على بيانات التدريب لنماذجها. يخبر ملف robots.txt الروبوتات بعناوين URL التي يمكنها الوصول إليها أو لا يمكنها الوصول إليها على موقعك. يوجد هذا الملف في عنوان URL الجذر الخاص بك؛ على سبيل المثال، يوجد على هذا الموقع على https://pyarabic.com/robots.txt.

لسوء الحظ، فإن ملف robots.txt يشبه علامة “قواعد السلوك” أكثر من كونه قواعد صارمة. ولا يمكن فرضها بمفردها. فالجهات الفاعلة الجيدة سوف تتبع القواعد؛ أما الجهات الفاعلة السيئة والروبوتات فلن تفعل ذلك؛ وإدارة هذه القواعد هي مجال آخر للدراسة على مواقع الويب الضخمة.

إن إضافة ملف robots.txt إلى موقعك أمر بسيط نسبيًا ويوصى به لجميع مواقع الويب. كتب آدم جونسون مقالاً ممتازًا حول هذا الموضوع أوصي بشدة بمشاهدته. هذا البرنامج التعليمي هو وجهة نظري حول كيفية القيام بذلك.

الإعداد الأولي

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

# Windows
$ cd onedrive\desktop\
$ mkdir django_robots
$ cd django_robots
$ python -m venv .venv
$ .venv\Scripts\Activate.ps1
(.venv) $ python -m pip install django~=5.0.0
(.venv) $ django-admin startproject django_project .
(.venv) $ python manage.py migrate
(.venv) $ python manage.py runserver

بالانتقال إلى http://127.0.0.1:8000، سترى شاشة ترحيب Django.

الصفحة الترحيبية لجانغو
الصفحة الترحيبية لجانغو

إنشاء ملف robots.txt

يوجد ملف robots.txt للمشروع بأكمله وليس خاصًا بالتطبيق؛ لذلك، يجب أن يكون في دليل القوالب العامة. بعد الخروج من خوادم التطوير باستخدام Control + c، قم بإنشاء ملف من سطر الأوامر.

(.venv) $ mkdir templates

ثم نحتاج إلى إخبار Django بذلك، لذا قم بتحديث قسم TEMPLATES في ملف settings.py عن طريق تغيير السطر الخاص بـ DIRS.

# django_project/settings.py
TEMPLATES = [
    {
        "BACKEND": "django.template.backends.django.DjangoTemplates",
        "DIRS": [BASE_DIR / "templates"],  # new
        "APP_DIRS": True,
        "OPTIONS": {
            "context_processors": [
                "django.template.context_processors.debug",
                "django.template.context_processors.request",
                "django.contrib.auth.context_processors.auth",
                "django.contrib.messages.context_processors.messages",
            ],
        },
    },
]

الآن أصبح Django يعرف كيفية البحث عن مجلد قوالب في الدليل الجذر. أضف ملفًا جديدًا باستخدام محرر النصوص، templates/robots.txt. محتويات هذا الملف هي كما يلي:

# robots.txt
User-Agent: *
Disallow: /privatestuff/

User-agent: GPTBot
Disallow: /

ينطبق السطر العلوي على جميع الروبوتات ويطلب تجاهل المجلد المسمى privatestuff. ثم يخبر GPTBot، الذي يستخدمه ChatGPT، بتجاهل الموقع بالكامل. لدى Google دليل مفصل حول ملفات robots.txt مع مزيد من المعلومات حول كيفية تخصيصها.

الخيار 1: القالب

الطريقة الأبسط لعرض ملف robots.txt هي تضمين عرض جديد في URLconf. على سبيل المثال، يمكننا استيراد TemplateView ثم تحديد اسم القالب ونوع المحتوى الخاص به (يجب تحديد text/plain بدلاً من التنسيق الافتراضي text/html).

# django_project/urls.py
from django.contrib import admin
from django.urls import path
from django.views.generic.base import TemplateView  # new

urlpatterns = [
    path("admin/", admin.site.urls),
    # robots.txt path below
    path(
        "robots.txt",
        TemplateView.as_view(template_name="robots.txt", content_type="text/plain"),
    ),
]

على سطر الأوامر، اكتب الأمر python manage.py runserver، ويجب أن تكون قادرًا على عرض الملف على http://127.0.0.1:8000/robots.txt.

على الرغم من أن هذا النهج بسيط للغاية، إلا أنني لا أحب خلط منطق العرض مع منطق عنوان URL.

الخيار 2: عرض/عنوان URL

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

لتنفيذ ملف robots.txt، ابدأ بإنشاء تطبيق جديد يسمى pages.

(.venv) $ python manage.py startapp pages 

أضفه على الفور إلى إعداد INSTALLED_APPS.

# django_project/settings.py
INSTALLED_APPS = [
    "django.contrib.admin",
    "django.contrib.auth",
    "django.contrib.contenttypes",
    "django.contrib.sessions",
    "django.contrib.messages",
    "django.contrib.staticfiles",
    "pages",  # new
]

ثم قم بإنشاء عرض مخصص يسمى RobotsTxtView والذي يعتمد على TemplateView المضمن.

# pages/views.py 
from django.views.generic import TemplateView


class RobotsTxtView(TemplateView):
    template_name = "robots.txt"

الآن نحتاج إلى إعداد عناوين URL. قم بإنشاء ملف pages/urls.py جديد بالكود التالي:

# pages/urls.py
from django.urls import path
from .views import RobotsTxtView

urlpatterns = [
    path("robots.txt", RobotsTxtView.as_view(content_type="text/plain"), name="robots"),
]

وبعد ذلك، قم بتحديث ملف django_project/urls.py على مستوى المشروع أيضًا.

# django_project/settings.py
from django.contrib import admin
from django.urls import path, include  # new

urlpatterns = [
    path("admin/", admin.site.urls),
    path("", include("pages.urls")),  # new
]

تأكد من تشغيل python manage.py runserver ثم قم بزيارة صفحة http://127.0.0.1:8000/robots.txt.

الاختبارات

لن يكتمل أي كود بدون اختبارات آلية يمكن تشغيلها للتأكد من عدم حدوث أي عطل في المستقبل. إذا اتبعت النهج الثاني لإنشاء تطبيق صفحات مخصص، فيجب أن يكون هناك ملف pages/tests.py هناك.

فيما يلي مثال لكيفية ظهور الاختبارات:

# pages/tests.py
from http import HTTPStatus
from django.test import SimpleTestCase


class RobotsTxtTests(SimpleTestCase):
    def test_get(self):
        response = self.client.get("/robots.txt")

        assert response.status_code == HTTPStatus.OK
        assert response["content-type"] == "text/plain"

قم بإجراء الاختبارات بالطريقة المعتادة.

(.venv) $ python manage.py test
Found 1 test(s).
System check identified no issues (0 silenced).
.
----------------------------------------------------------------------
Ran 1 test in 0.002s

OK

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

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

اترك تعليقاً

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

Scroll to Top

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

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

Continue reading