Başta robots.txt
dosyaları olmak üzere, alan adı doğrulama veya kimlik tanımlama için kullanılan çeşitli TXT dosyaları bulunmakta. Günün birinde bu TXT dosyalarını Django ile kök dizine dinamik olarak eklemeniz gerekebilir. Nasıl yapabileceğimizi görelim.
robots.txt: Web tarama robotlarının bir sitede hangi dizinlere erişebileceğini belirten metin dosyasıdır.
1. HttpResponse ile urlconf içinde
Çok basit ve anlaşılır. String olarak tanımlanan içerik, belirli URL'e erişilince text/plain
içerik tipiyle servis edilir:
from django.urls import path
from django.http import HttpResponse
ADS_TXT = 'Publisher ID: e98a0dce21'
ROBOTS_TXT_LINES = [
'User-agent: Googlebot',
'Disallow: /nogooglebot/',
'\n'
'User-agent: *',
'Allow: /',
]
ROBOTS_TXT = '\n'.join(ROBOTS_TXT_LINES)
urlpatterns = [
path('ads.txt', lambda r: HttpResponse(ADS_TXT, content_type="text/plain")),
path('robots.txt', lambda r: HttpResponse(ROBOTS_TXT, content_type="text/plain")),
]
2. Template olarak
Bu yöntemde templates
dizininizde örneğin robots.txt
isminde dosyanızı oluşturacak ve bunu servis edeceksiniz.
User-agent: Googlebot
Disallow: /nogooglebot/
User-agent: *
Allow: /
from django.urls import path
from django.views.generic.base import TemplateView
urlpatterns = [
path(
'robots.txt',
TemplateView.as_view(template_name="robots.txt", content_type="text/plain")),
]
3. Özel view fonksiyonu ile
Bu yöntemde function veya class-based view'ları kullanabiliriz.
from django.http import HttpResponse
from django.views.decorators.http import require_GET
@require_GET # sadece GET isteklerini kabul et
def ads_txt(request):
content = 'Publisher ID: e98a0dce21'
return HttpResponse(content, content_type="text/plain")
from django.urls import path
from main.views import ads_txt
urlpatterns = [
path('robots.txt', ads_txt),
]
4. NGINX ile
Aslına bakarsak, statik bir dosyayı NGINX ile servis etmemiz gerektiği için bu yöntemi tercih etmek daha doğru olabilir. Fakat takdir edersiniz ki bu yöntemlerin her birinin avantajları ve dezavantajları var. Örneğin diğer yollarda test yazabilecek iken, bunda Django içinde test yazmanız pek mümkün değil. Yazar mısınız o ayrı.
NGINX konfigürasyonunuza yalnızca bir lokasyon satırı (location /robots.txt ...
) eklemeniz yeterli:
upstream server_http {
server backend:8000;
}
server {
listen 80;
# ...
location / {
proxy_pass http://server_http;
# ...
}
location /robots.txt {
alias /static/robots.txt;
}
# ...
}