Membuat Custom Middleware di Django 1.8 dan 1.10.5
Apa fungsi middleware? Banyak, salah satunya adalah melakukan sesuatu sebelum atau sesudah request di jalankan. Pada salah satu project, saya ingin me-redirect semua request yang di URL mengandung parameter 'PageSpeed' ke halaman itu juga namun parameter 'PageSpeed' dihilangkan. Bingung ya? Begini contohnya:
URL ini:
ingin saya redirect ke
Kenapa ada 2 versi Django? Karena membuat custom middleware di kedua versi tersebut berbeda. Dan inilah custom middleware yang saya buat:
Django 1.8
Django 1.10.5
Simpan baris kode di atas ke dalam sebuah file di
Kemudian panggil di settings.py
MIDDLEWARE_CLASSES untuk Django 1.8 atau MIDDLEWARE di Django 1.10.5. Contoh
URL ini:
http://www.example.com/read/1?PageSpeed=noscript
ingin saya redirect ke
http://www.example.com/read/1
Kenapa ada 2 versi Django? Karena membuat custom middleware di kedua versi tersebut berbeda. Dan inilah custom middleware yang saya buat:
Django 1.8
import re
from django.http import HttpResponsePermanentRedirect
class StripPageSpeedMiddleware(object):
def process_request(self, request):
req = request.build_absolute_uri()
if 'PageSpeed=noscript' in req:
clean_url = re.sub('[?&]PageSpeed=noscript', '', req)
return HttpResponsePermanentRedirect(clean_url)
Django 1.10.5
import re
from django.http import HttpResponsePermanentRedirect
def StripPageSpeedParam(get_response):
# One-time configuration and initialization.
def middleware(request):
# Code to be executed for each request before
# the view (and later middleware) are called.
req = request.build_absolute_uri()
if 'PageSpeed' in req:
clean_url = re.sub('[?&]PageSpeed=noscript', '', req)
return HttpResponsePermanentRedirect(clean_url)
response = get_response(request)
# Code to be executed for each request/response after
# the view is called.
return response
return middleware
Simpan baris kode di atas ke dalam sebuah file di
myapp/mymiddleware.py
Kemudian panggil di settings.py
MIDDLEWARE_CLASSES untuk Django 1.8 atau MIDDLEWARE di Django 1.10.5. Contoh
MIDDLEWARE = [
...
'myapp.mymiddleware.StripPageSpeedParam',
]
[…] Membuat Custom Middleware di Django 1.8 dan 1.10.5 […]
ReplyDelete[…] Satu sisi bermanfaat, namun dari sisi SEO, adanya 2 halaman dengan content yang sama maka akan dipandang sebagai duplicate content, dan ini tentu saja tidak baik untuk kesehatan SEO website kita. Kalau halaman-halaman dengan parameter PageSpeed=noscript belum terlanjur terindeks, segera tambahkan baris kode di atas. Jika sudah terlanjur, segera bersihkan dengan menambahkan canonical url dan me-redirect halaman-halaman dengan param tersebut (Jika Anda menggunakan Django, silakan lihat cara membuat tulisan saya tentang custom middleware). […]
ReplyDelete